二叉搜索树


当数组需要保持有序时,添加和删除元素的计算量都是很大的。BST与有序数组相似,里面的值(key)是有序存储的。
BST可以搜索某个key、找到最小和最大的元素、找到某个要搜索key(不需要在BST中)的前驱和后继、按顺序列出一定范围内的key。
然而,不像有序数组,从BST中添加和删除key是高效的。
BST是一种二叉树,里面的节点存储的key是可比较的,例如整型和字符串。
存储在节点中的key需要遵从BST的法则,某个节点中存储的key需要大于等于左子树中的所有节点的key,需要小于等于右子树中的所有节点的key。
key的查找,插入和删除时间复杂度与树的高度成正比,最差情况为O(n),当BST的插入和删除是以非常白痴的方式实现的。
然而,有一些插入和删除的实现方式可以保证树的高度是O(nlogn)。这要求在树的节点存储和更新额外的数据。红黑树就是一种高度平衡的BST,被广泛的用在数据结构库中。

BST的原型代码:
template<typename T>
struct BSTNode {
T data;
unique_ptr<BSTNode<T>> left, right;
};

搜索是BST的最基础的应用。和哈希表不同,BST可以找到最小和最大的元素,找到下一个最大/最小元素。对于库里实现的BST,这些操作,与查找,删除的时间复杂度都是O(logn)。BST和哈希表都用了O(n)的空间,在实际中,BST用的空间会稍微多一点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值