BST上下一个/上一个函数的时间复杂度

时间:2012-05-19 12:12:31

标签: data-structures binary-tree big-o time-complexity

我对通过二叉搜索树踩踏前进和倒退的最坏情况效率感兴趣。

不平衡的树:

   5
  /
 1 
  \
   2
    \
     3
      \
       4

看起来最坏的情况是4-> 5,这需要4次操作。

平衡树:

   2
  / \
 1   4
    / \ 
   3   5

最坏情况是2-> 3,需要2次操作。

我是否正确地认为任何BST的最坏情况是O(高度-1),平衡树的O(log n)和不平衡树的O(n-1)?

2 个答案:

答案 0 :(得分:3)

  

我是否正确地认为任何BST的最坏情况是O(高度-1),平衡树的O(log n)和不平衡树的O(n-1)?

是的,从kk+1旅行时,您只需要上下移动,而不是两者(因为不变量为left child < parent < right child)。

虽然O(高度-1)可写为O(高度)(类似于O(n))。

答案 1 :(得分:1)

如果您正在考虑按顺序遍历树,则复杂度在平衡方面不会改变。该算法仍然是

 walk( Node n)
    walk( n.left )
    visit( n )
    walk( n.right )

每步1个操作。

当你开始应用查找,插入和删除时,余额就会发挥作用。

要使这些操作在O(log N)中,需要平衡树。

如果您正在尝试查找树定义的序列中的下一个元素,则可能需要在树的整个高度移动,当然在平衡树中,这是O(log N),并且不平衡的树,这是O(N)