二叉查找树BST(1)
2016-09-03 17:44
211 查看
今天建二叉查找树BST(binary search tree)
#include <iostream> using std::cout; using std::endl; using ElemType = int; struct Node { ElemType data; Node *left; Node *right; }; class BST { public: BST(); ~BST(); void insert(ElemType data); Node *search(ElemType data); void destroy_tree(); void preTraverse(); void inTraverse(); private: void insert(ElemType data, Node *leaf); Node *search(ElemType data, Node *leaf); void destroy_tree(Node *leaf); void preTraverse(Node *leaf); void inTraverse(Node *leaf); Node *root; }; BST::BST() { root = nullptr; } BST::~BST() { destroy_tree(); } void BST::insert(ElemType data, Node *leaf) { if (data < leaf->data) { if (leaf->left != nullptr) { insert(data, leaf->left); } else { leaf->left = new Node; leaf->left->data = data; leaf->left->left = nullptr; leaf->left->right = nullptr; } } else if (data > leaf->data) { if (leaf->right != nullptr) { insert(data, leaf->right); } else { leaf->right = new Node; leaf->right->data = data; leaf->right->left = nullptr; leaf->right->right = nullptr; } } else { return; } } Node *BST::search(ElemType data, Node *leaf) { if (leaf != nullptr) { if (data == leaf->data) { return leaf; } if (data < leaf->data) { return search(data, leaf->left); } else { return search(data, leaf->right); } } else { return nullptr; } } void BST::destroy_tree(Node *leaf) { if (leaf != nullptr) { //left-right-parent destroy_tree(leaf->left); destroy_tree(leaf->right); delete leaf; } } void BST::preTraverse(Node *leaf) { if (leaf != nullptr) { cout << leaf->data << ' '; preTraverse(leaf->left); preTraverse(leaf->right); } else { return; } } void BST::inTraverse(Node *leaf) { if (leaf != nullptr) { inTraverse(leaf->left); cout << leaf->data << ' '; inTraverse(leaf->right); } else { return; } } void BST::insert(ElemType data) { if (root != nullptr) { insert(data, root); } else { root = new Node; root->data = data; root->left = nullptr; root->right = nullptr; } } Node *BST::search(ElemType data) { return search(data, root); } void BST::destroy_tree() { destroy_tree(root); } void BST::preTraverse() { preTraverse(root); } void BST::inTraverse() { inTraverse(root); } int main(void) { BST bTree; bTree.insert(10); bTree.insert(6); bTree.insert(14); bTree.insert(5); bTree.insert(8); bTree.insert(11); bTree.insert(18); bTree.preTraverse(); //10 6 5 8 14 11 18 cout << endl; //中序遍历结果就是二叉查找树中元素从小到大排列 bTree.inTraverse(); //5 6 8 10 11 14 18 cout << endl; return 0; }
相关文章推荐
- 二叉查找树(BST)
- BST 二叉查找树的实现
- 动态查找树比较: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)
- BST(Binary Search Tree) 二叉查找树
- 【查找结构 2】二叉查找树 [BST]
- 二叉查找树(BST)
- 树03-二叉查找树[BST]
- BST二叉查找树的实现与操作
- 二叉查找树的实现(BST)
- 常用树类数据结构总结-二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的性能分析
- 二叉查找树(二叉排序树)BST解析
- 二叉搜索树;二叉查找树;二叉排序树;binary search tree(BST)
- Javascript数据结构算法之二叉查找树BST(构造,遍历,查找,删除,计数)
- Java实现二叉查找树(BST)
- 二叉查找树(BST)---创建 清空 遍历
- 最优二叉查找树(optimal BST)
- 查找结构 动态查找树比较 树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)
- 二叉查找树的实现(BST)(转载自http://blog.csdn.net/collonn/article/details/18732079)
- 二叉查找树BST(2)
- 数据结构:二叉查找树(BST)&平衡二叉树(AVL)