64,648
社区成员
发帖
与我相关
我的任务
分享
#ifndef BINARYTREE_H_INCLUDED
#define BINARYTREE_H_INCLUDED
#include <iostream>
using namespace std;
template<class T>
struct BTNode
{
BTNode(){ lChild=rChild=NULL;}
BTNode(const T& x)
{
element=x; lChild=rChild=NULL;
}
BTNode(const T& x, BTNode<T>* l,BTNode<T>* r)
{
element=x; lChild=l; rChild=r;
}
T element;
BTNode<T>* lChild, *rChild;
};
template<class T>
void Visit(T& x)
{
cout<<x<<" ";
}
template <class T>
class BinaryTree
{
public:
BinaryTree(){root=NULL;}
~BinaryTree(){};
protected:
BTNode<T>* root;
public:
bool Root(T& x)const;
void MakeTree(const T& x, BinaryTree<T> & left, BinaryTree<T> & right);
void PreOrder(void (*Visit)(T& x));
private:
void PreOrder(void (*Visit)(T& x),BTNode<T>* t);
public:
//void Clear(void);
};
#endif // BINARYTREE_H_INCLUDED
/*
** Copyright (C) QPSOFT.COM All rights reserved.
*/
#include "BinaryTree.h"
//template <class T>
//BinaryTree<T>::~BinaryTree()
//{
//}
template<typename T>
bool BinaryTree<T>::Root(T& x)const
{
if(root){
x=root->element; return true;
}
else return false;
}
template<typename T>
void BinaryTree<T>::MakeTree(const T& x, BinaryTree<T>& left, BinaryTree<T>& right)
{
if(root||&left==&right) return;
root=new BTNode<T>(x,left.root, right.root);
left.root=right.root=NULL;
}
template <class T>
void BinaryTree<T>::PreOrder(void (*Visit)(T& x))
{
PreOrder(Visit,root);
}
template <class T>
void BinaryTree<T>::PreOrder(void (*Visit)(T& x),BTNode<T>* t)
{
if (t){
Visit(t->element);
PreOrder(Visit,t->lChild);
PreOrder(Visit,t->rChild);
}
}
#include "BinaryTree.h"
void main(void)
{
BinaryTree<char> a,b,x,y,z;
y.MakeTree('E',a,b);
z.MakeTree('F',a,b);
x.MakeTree('C',y,z);
y.MakeTree('D',a,b);
z.MakeTree('B',y,x);
z.PreOrder(Visit);
x.PreOrder(Visit); y.PreOrder(Visit);
}