C++实现的二叉搜索树BST
Posted 一厘阳光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现的二叉搜索树BST相关的知识,希望对你有一定的参考价值。
概念:
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树),二叉搜索树是一种特殊的二叉树
二叉搜索树的性质:
1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。
2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。
3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。
4. 左右子树都是二叉搜索树。
根据二叉搜索树的性质知:对二叉搜索树进行中序遍历得到的结点序列必然是一个有序序列。
代码:(代码中间包含了对基本功能(插入,删除,查找)的递归和非递归的实现)
[cpp] view plain copy
- <span style="font-size:18px;">include <iostream>
- #include <string>
- using namespace std;
- template<class K,class V>
- struct BSTreeNode
- K _data; //值
- V _freq; //出现的频率
- BSTreeNode<K, V>* _left; //指向左子树的指针
- BSTreeNode<K, V>* _right; //指向右子树的指针
- BSTreeNode(const K& data, const V& freq)//初始化
- :_data(data)
- , _freq(freq)
- , _left(NULL)
- , _right(NULL)
- ;
- template<class K, class V>
- struct BSTree
- typedef BSTreeNode<K, V> Node;
- public:
- BSTree()//初始化
- :_root(NULL)
- //插入
- bool Insert(const K& data, const V& freq)
- if (_root == NULL)//如果节点为空,就在此节点处加入data数据
- _root = new Node(data, freq);
- return true;
- Node* parent = NULL;
- Node* cur = _root;
- while (cur)//搜索data应该插入的节点:parent节点后
- if (data > cur->_data)//如果data大于节点的值,就继续在节点的右子树中插入data
- parent = cur;
- cur = cur->_right;
- else if (data < cur->_data)//如果data小于节点的值,就继续在节点的左子树中插入data
- parent = cur;
- cur = cur->_left;
- else
- cur->_freq++;
- return true;
- //在parent节点后插入data
- if (data > parent->_data)
- parent->_right = new Node(data, freq);
- else
- parent->_left = new Node(data, freq);
- return true;
- Node* Find(const K& data)//查找
- Node* cur = _root;
- while (cur)
- if (data >cur->_data)//若data大于当前节点,则在当前节点的右子树中查找
- cur = cur->_right;
- else if (data < cur->_data)//若data小于当前节点,则在当前节点的左子树中查找
- cur = cur->_left;
- else
- return cur;
- return NULL;
- bool Remove(const K& data)//删除
- Node* parent = NULL;
- Node* cur = _root;
- while (cur)//寻找data节点cur
- if (data > cur->_data)
- parent = cur;
- cur = cur->_right;
- else if (data < cur->_data)
- parent = cur;
- cur = cur->_left;
- else//要么cur==NULL退出了循环,要么data==cur->_databreak
- break;
- python实现二叉搜索树_二叉搜索树(BST)---python实现