二叉搜索树的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 };