1 #define BinNodePosi(T) BinNode<T>*
2
3 template <typename T> struct BinNode{
4
5 T key;//键值
6 BinNodePosi(T) leftChild;//左孩子
7 BinNodePosi(T) rightChild;//右孩子
8 BinNodePosi(T) parent;//父节点
9
10 BinNode(){}
11 BinNode(T value,BinNodePosi(T) p,BinNodePosi(T) left,BinNodePosi(T) right):
12 key(value),parent(p),leftChild(left),rightChild(right){}
13 BinNode(BinNodePosi(T) node):
14 key(node->key),parent(node->parent),leftChild(node->leftChild),rightChild(node->rightChild){}
15
16 bool operator!=(BinNode const& bn){return key!=bn.key;}
17
18 };
1 #include "BinTree_Imple.h"
2 #include "BinNode.h"
3
4 template <typename T> class BinTree{
5
6 private:
7 BinNodePosi(T) mRoot;//根节点
8
9 public:
10 BinTree(){}//构造函数
11 ~BinTree(){ destroy(); }//析构函数
12
13 void preOrder();//先序遍历
14 void inOrder();//中序遍历
15 void postOrder();//后序遍历
16
17 BinNodePosi(T) search(T key);//根据键值查找节点位置,递归版
18 BinNodePosi(T) iterativeSearch(T key);//非递归版
19
20 T min();//左分支中的最小值
21 T max();//右分枝中的最大值
22
23 BinNodePosi(T) successor(BinNodePosi(T) x);//后继,该节点右子树的最小节点
24 BinNodePosi(T) predecessor(BinNodePosi(T) x);//前驱,该节点左子树的最大节点
25
26 void insert(T key);//插入节点
27 void remove(T key);//删除节点
28 void destroy();//销毁二叉树
29 void print();//打印二叉树
30
31
32
33 private:
34 void preOrder(BinNodePosi(T) x) const;
35 void inOrder(BinNodePosi(T) x) const;
36 void postOrder(BinNodePosi(T) x) const;
37
38 BinNodePosi(T) search(BinNodePosi(T) x,T key) const;
39 BinNodePosi(T) iterativeSearch(BinNodePosi(T) x, T key) const;
40
41 BinNodePosi(T) max(BinNodePosi(T) x);
42 BinNodePosi(T) min(BinNodePosi(T) x);
43
44 void insert(BinNodePosi(T) &x,BinNodePosi(T) z);
45 BinNodePosi(T) remove(BinNodePosi(T) &x,BinNodePosi(T) z);
46 void destroy(BinNodePosi(T) &x);
47 void print(BinNodePosi(T) x, T key, int direction);
48
49 };