Binary Search Tree 发表于 2017-04-06 | 分类于 数据结构 Binary Search Tree题目描述: 用C++语言构造搜索二叉树。包括基本的功能;先序遍历,中序遍历,后序遍历,取最大值,取最小值,插入,删除,查找。 代码如下:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165#include <iostream>using namespace std;template <typename T>class TreeNode{public: TreeNode* left; TreeNode* right; T value; TreeNode(T key): value(key), left(NULL), right(NULL){}; TreeNode(T key, TreeNode* l, TreeNode* r): value(key), left(l), right(r){};};//构造二叉树的节点类template <typename T>class BSTree{public: BSTree() = default; BSTree(TreeNode<T>* node): root(node) {}; ~BSTree(){}; void preOrder(); void inOrder(); void postOrder(); void insert(T value);// void insert(TreeNode* node); void search(T value);// void del(T value); bool empty(); TreeNode<T>* getMin(); TreeNode<T>* getMax();private: TreeNode<T>* root; void preOrder(TreeNode<T>* const node) const; void inOrder(TreeNode<T>* const node) const; void postOrder(TreeNode<T>* const node) const; void search(TreeNode<T>* node, T key); TreeNode<T>* getMin(TreeNode<T>* const node); TreeNode<T>* getMax(TreeNode<T>* const node); bool empty(TreeNode<T>* node); void insert(TreeNode<T>* node, T value);};template <typename T>void BSTree<T>::preOrder(TreeNode<T>* const node) const { if (node) { cout << node->value << endl; preOrder(node->left); preOrder(node->right); }else{ return; }}template <typename T>void BSTree<T>::preOrder() { preOrder(root);}template <typename T>void BSTree<T>::inOrder(TreeNode<T>* const node) const { if (node){ inOrder(node->left); cout << node->value << endl; inOrder(node->right); }else{ return; }}template <typename T>void BSTree<T>::inOrder() { inOrder(root);}template <typename T>void BSTree<T>::postOrder(TreeNode<T>* const node) const { if (node){ postOrder(node->left); postOrder(node->right); cout << node->value << endl; }else{ return; }}template <typename T>void BSTree<T>::postOrder() { postOrder(root);}template <typename T>void BSTree<T>::search(TreeNode<T> * node, T value) { if (!node) { if (value == node->value) { cout << "the value is in this tree" << endl; return; } if (value > node->value) search(node->right, value); if (value < node->value) search(node->left, value); } return;}template <typename T>void BSTree<T>::search(T value) { search(root, value);}template <typename T>TreeNode<T>* BSTree<T>::getMin(TreeNode<T> *const node) { TreeNode<T>* tmp = node; while(tmp->left){ tmp = tmp->left; } return tmp;}template <typename T>TreeNode<T>* BSTree<T>::getMin() { getMin(root);}template <typename T>TreeNode<T>* BSTree<T>::getMax(TreeNode<T> *const node) { TreeNode<T>* tmp = node; while(tmp->right){ tmp = tmp->right; } return tmp;}template <typename T>TreeNode<T>* BSTree<T>::getMax() { getMax(root);}template <typename T>bool BSTree<T>::empty(TreeNode<T>* node){ return node == NULL;}template <typename T>bool BSTree<T>::empty(){ return empty(root);}template <typename T>void BSTree<T>::insert(TreeNode<T>* node, T value) { if (node == NULL){ TreeNode<T>* tmp = new TreeNode<T>(value); node = tmp; } if (node->value > value){ if (node->left == NULL){ TreeNode<T>* tmp = new TreeNode<T>(value); node->left = tmp; }else{ insert(node->left, value); } }else{ if (node->right == NULL){ TreeNode<T>* tmp = new TreeNode<T>(value); node->right = tmp; }else{ insert(node->right, value); } }}template <typename T>void BSTree<T>::insert(T value) { insert(root, value);}