C++实现的二叉搜索树BST

Posted 一厘阳光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现的二叉搜索树BST相关的知识,希望对你有一定的参考价值。

概念:

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树),二叉搜索树是一种特殊的二叉树

二叉搜索树的性质:

1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。
2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。
3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。
4. 左右子树都是二叉搜索树

根据二叉搜索树的性质知:对二叉搜索树进行中序遍历得到的结点序列必然是一个有序序列。


接下来用C++代码实现搜索二叉树,若有错误或不足之处,还望各位大神指点。。。

代码:(代码中间包含了对基本功能(插入,删除,查找)的递归和非递归的实现)

[cpp]  view plain  copy  
  1. <span style="font-size:18px;">include <iostream>  
  2. #include <string>  
  3. using namespace std;  
  4.   
  5. template<class K,class V>  
  6. struct BSTreeNode  
  7.   
  8.     K _data;            //值  
  9.     V _freq;                //出现的频率  
  10.   
  11.     BSTreeNode<K, V>* _left;      //指向左子树的指针  
  12.     BSTreeNode<K, V>* _right;     //指向右子树的指针  
  13.   
  14.     BSTreeNode(const K& data, const V& freq)//初始化  
  15.         :_data(data)  
  16.         , _freq(freq)  
  17.         , _left(NULL)  
  18.         , _right(NULL)  
  19.       
  20. ;  
  21. template<class K, class V>  
  22. struct BSTree  
  23.   
  24.     typedef BSTreeNode<K, V> Node;  
  25. public:  
  26.     BSTree()//初始化  
  27.         :_root(NULL)  
  28.       
  29.     //插入  
  30.     bool Insert(const K& data, const V& freq)  
  31.       
  32.         if (_root == NULL)//如果节点为空,就在此节点处加入data数据  
  33.           
  34.             _root = new Node(data, freq);  
  35.             return true;  
  36.           
  37.   
  38.         Node* parent = NULL;  
  39.         Node* cur = _root;  
  40.         while (cur)//搜索data应该插入的节点:parent节点后  
  41.           
  42.             if (data > cur->_data)//如果data大于节点的值,就继续在节点的右子树中插入data  
  43.               
  44.                 parent = cur;  
  45.                 cur = cur->_right;  
  46.               
  47.             else if (data < cur->_data)//如果data小于节点的值,就继续在节点的左子树中插入data  
  48.               
  49.                 parent = cur;  
  50.                 cur = cur->_left;  
  51.               
  52.             else  
  53.               
  54.                 cur->_freq++;  
  55.                 return true;  
  56.               
  57.           
  58.         //在parent节点后插入data  
  59.         if (data > parent->_data)  
  60.           
  61.             parent->_right = new Node(data, freq);  
  62.           
  63.         else  
  64.           
  65.             parent->_left = new Node(data, freq);  
  66.           
  67.         return true;  
  68.       
  69.     Node* Find(const K& data)//查找  
  70.       
  71.         Node* cur = _root;  
  72.         while (cur)  
  73.           
  74.             if (data >cur->_data)//若data大于当前节点,则在当前节点的右子树中查找  
  75.               
  76.                 cur = cur->_right;  
  77.               
  78.             else if (data < cur->_data)//若data小于当前节点,则在当前节点的左子树中查找  
  79.               
  80.                 cur = cur->_left;  
  81.               
  82.             else  
  83.               
  84.                 return cur;  
  85.               
  86.           
  87.         return NULL;  
  88.       
  89.     bool Remove(const K& data)//删除  
  90.       
  91.         Node* parent = NULL;  
  92.         Node* cur = _root;  
  93.   
  94.         while (cur)//寻找data节点cur  
  95.           
  96.             if (data > cur->_data)  
  97.               
  98.                 parent = cur;  
  99.                 cur = cur->_right;  
  100.               
  101.             else if (data < cur->_data)  
  102.               
  103.                 parent = cur;  
  104.                 cur = cur->_left;  
  105.               
  106.             else//要么cur==NULL退出了循环,要么data==cur->_databreak  
  107.               
  108.                 break;  
  109.               
  110. python实现二叉搜索树_二叉搜索树(BST)---python实现

    [ 数据结构进阶 - C++ ] 二叉搜索树 BSTree

    二叉搜索树(BST)的具体实现

    二叉搜索树(BST)的具体实现

    二叉搜索树_BST

    二叉搜索树_BST