二叉搜索树
目录:
一.概念
二叉搜索树又称为二叉排序树,或者是一个空树,必须满足以下特点:
满足条件:
1.如果其中的左子树不为空,则左子树上所有的节点的值小于根节点的值
^
2.如果其中的右子树不为空,则右子树上所有的节点的值大于根节点的值
^
3.每个数据都是单一存在,不会重复
二.接口声明
//1.二叉树内部节点的构建
struct BNode
//2.查找对应的节点
Node* find(const T& val)
//3.拷贝出新的搜索二叉树
Node* copy(Node* root)
//4.插入一个元素
bool insert(const T& val)
//5.删除单一的元素
bool erase(const T& val)
//6.析构函数
~BTree()
//7.中序遍历方式打印
void _inorder(Node* root)
三.接口实现&原理
1.构造内部类
内部写的是所存储的数据和对应的左右子树的存储,包括对每一个节点的构造函数
template <class T>
struct BNode{
T _data; //对应的数据
typedef BNode<T> Node; //重命名
Node* _left; //左子树的节点
Node* _right; //右子树的节点
BNode(const T& data) //构造函数
:_data(data) //数据的初始化
, _left(nullptr)
, _right(nullptr) //左右节点初始化成nullptr
{
}
};
2.查找函数
1.从根节点开始比较大小
^
2.大于向右遍历,小于向左遍历,直到找到对应的值为止.
Node* find(const T& val){
Node* cur = _root; //创建cur指向其根节点
while (cur){
//在根节点存在的时候
if (cur->_data == val) //如果找到对应的值
return cur; //则直接返回
else if (cur->_data > val) //如果根节点的值大于要找的值,则更新到左子树进行遍历
cur = cur->_left;
else
cur = cur->_right;