二进制搜索树,是一种基于节点的二进制树数据结构,具有以下属性:
- 节点的左子树仅包含键值小于节点键值的节点。
- 节点的右子树仅包含键大于该节点的键的节点。
- 左和右子树也都必须是二叉搜索树。
不得有重复的节点。
BST支持在O(h)时间内搜索,插入,删除,下限,上限,更大,更小等操作,其中h是BST的高度。为了降低高度,实际中使用了自平衡BST(例如AVL和Red Black Trees)。这些自平衡BST将高度保持为O(Log n)。因此,所有上述操作都变为O(Log n)。与这些一起,BST还允许在O(n)时间内对数据进行排序的顺序遍历。
- 自平衡二进制搜索树用于维护排序的数据流。例如,假设我们要下达在线订单,并且希望按价格排序的顺序维护实时数据(在RAM中)。例如,我们希望随时知道以低于给定成本的价格购买的商品数量。或者,我们希望知道以高于给定成本的价格购买的商品数量。
- 自平衡二进制搜索树用于实现双头优先级队列。使用Binary Heap,我们可以在带有extractMin()或extractMax()的情况下实现优先级队列。如果我们希望同时支持这两种操作,则可以使用自平衡二进制搜索树在O(Log n)中进行这两种操作
- 自平衡BST最适合的数据结构还有很多算法问题,例如在右侧计算较小的元素,在右侧计算最小的较大元素等。