二叉搜索树的C++实现

 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 };

 

posted @ 2016-08-09 08:25  Fantasy's  阅读(243)  评论(0编辑  收藏  举报