/*https://www.cnblogs.com/skywang12345/p/3576373.html#aa1*/ /*二叉查找树代码实现*/ #include<bits/stdc++.h> using namespace std; template <class t> class bstnode { public: t key;//关键字,用来对节点进行排序 bstnode *left;//左孩子 bstnode *right;//右孩子 bstnode *parent;//父节点 bstnode(t value,bstnode *p,bstnode *l,bstnode *r): key(value),parent(),left(l),right(r) {} }; //表示二叉查找树的节点 template<class t> class bstree { private: bstnode<t> *mroot;//根节点 public: bstree(); ~bstree(); void preorder();//前序遍历 void inorder();//中序遍历 void postorder();//后序遍历 bstnode<t> * search(t key);//递归实现查找二叉树中键值为key的节点 bstnode<t> * iterativesearch(t key);//非递归实现查找二叉树中键值为key的节点 t minimum();//查找最小节点 t maximum();//查找最大节点 bstnode<t> * successor(bstnode<t> *x);//找x的数值大于该节点的最小节点,后继结点 bstnode<t> * predecessor(bstnode<t> *x);//找x的数值小于该节点的最大节点,前驱节点 void insert(t key);//将节点插入二叉树 void remove(t key);//删除节点 void destroy();//销毁二叉树 void print();//打印二叉树 private: void preorder(bstnode<t> * tree) const;//前序遍历 void inorder(bstnode<t> * tree) const;//中序遍历 void postorder(bstnode<t> * tree) const;//后序遍历 bstnode<t>* search(bstnode<t>* x, t key) const;// (递归实现)查找"二叉树x"中键值为key的节点 bstnode<t>* iterativesearch(bstnode<t>* x, t key) const;// (非递归实现)查找"二叉树x"中键值为key的节点 bstnode<t>* minimum(bstnode<t>* tree); // 查找最小结点:返回tree为根结点的二叉树的最小结点。 bstnode<t>* maximum(bstnode<t>* tree);// 查找最大结点:返回tree为根结点的二叉树的最大结点。 void insert(bstnode<t>* &tree, bstnode<t>* z);// 将结点(z)插入到二叉树(tree)中 bstnode<t>* remove(bstnode<t>* &tree, bstnode<t> *z);// 删除二叉树(tree)中的结点(z),并返回被删除的结点 void destroy(bstnode<t>* &tree);// 销毁二叉树 void print(bstnode<t>* tree, t key, int direction);// 打印二叉树 }; template<class t> void bstree<t>::preorder(bstnode<t>* tree) const { if(tree!=NULL) { cout<<tree->key <<" "; preorder(tree->) } } int main() { }