二叉搜索树的时间效率

时间:2017-07-18 03:26:06

标签: insert time-complexity big-o binary-search-tree avl-tree

表示插入二叉搜索树的时间效率,

我知道插入的最佳/平均情况是O(log n),最坏的情况是O(N)。

我想知道的是,除了实施AVL(平衡BST)之外,是否有任何方法可以确保我们在插入时始终具有最佳/平均情况?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果不平衡二叉搜索树,则无法保证log n复杂性。在搜索/插入/删除时,您必须在树中导航才能将自己定位在正确的位置并执行操作。关键问题是 - 获得正确位置所需的步骤数量是多少?如果BST是平衡的,您可以预期2^(i-1)级别的平均i个节点。这进一步意味着,如果树具有k级别(k称为树的高度),则树中预期的节点数为1 + 2 + 4 + .. + 2^(k-1) = 2^k - 1 = n,它给出k = log n,这是从根到叶子导航所需的平均步数。

话虽如此,有各种平衡BST的实现。你提到了AVL,另一个非常受欢迎的是red-black tree,例如,在C ++中实现std::map或在Java中实现TreeMap

最糟糕的情况是O(n),当您不平衡BST并且您的树退化为链接列表时,可能会发生这种情况。很明显,为了定位在列表的末尾(这是最坏的情况),你必须遍历整个列表,这需要n步。