二叉搜索树

xiaoxiao2021-02-28  57

 当数组需要保持有序时,添加和删除元素的计算量都是很大的。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用的空间会稍微多一点。
转载请注明原文地址: https://www.6miu.com/read-2631146.html

最新回复(0)