二叉搜索树
二叉搜索树又称之为 二叉查找树 Binary Search Tree
简称 B Tree
(B树)
特点
-
二叉搜索树包含二叉树的特性
- 有左右两个孩子
- 节点之间没有环状结构
-
二叉搜索树的特性
- 数据的最左边一定是最小的值
- 数据的最右边一定是最大的值
- 二叉树左边的值一定都小于根节点的值
- 二叉树右边的值一定都小于根节点左边的值
-
每一个节点都符合二叉搜索树的特性
- 节点的左边比根节点要小
- 节点的右边比根节点要大
- 每个单独的节点也符合二叉搜索树的特性
优势
- 高效的插入数据
- 高效的删除数据
- 动态的维护数据
- 快速的找到数据的最大值
- 快速找到数据最小值
缺点
1. 每次插入递增或递减的数据,效率反而变低
实现二叉搜索树
确立数据之间的关系
- 二叉树
- 每个节点的键值大于左孩子
- 每个节点的键值小于右孩子
- 左右孩子为根仍是二叉搜索树
- 不一定是一个完全二叉树
节点的创建
template<typename K,typename V>
struct Node
{
K key;
V val;
Node *left;
Node *right;
Node(K &k, V& v, Node *left = nullptr, Node *right = nullptr)
:key(k), val(v), left(left), right(right)
{
}
};
实现功能
//返回容器的大小
int size();
//判断是否为空
bool empty()
Node<k,V> min(); //获取最小值
Node<k,V> max(); //获取最大值
void pop_max(); //删除最大值
void pop_min(); //删除最小值
void insert(); //插入数据
void remove(); //移除数据
V& find(K key); //通过Key找到值引用