2

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

不平衡树:

   5
  /
 1 
  \
   2
    \
     3
      \
       4

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

平衡树:

   2
  / \
 1   4
    / \ 
   3   5

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

我是否认为任何 BST 的最坏情况是 O(height-1),对于平衡树是 O(log n),对于不平衡树是 O(n-1)?

4

2 回答 2

3

我是否认为任何 BST 的最坏情况是 O(height-1),对于平衡树是 O(log n),对于不平衡树是 O(n-1)?

是的,您只需要在从kto移动时向上或向下移动,而k+1不是两者都需要(因为不变量是left child < parent < right child)。

尽管 O(height-1) 可以写成 O(height)(对于 O(n) 也是如此)。

于 2012-05-19T12:16:42.197 回答
1

如果您正在考虑按顺序遍历树,那么复杂性在平衡方面不会改变。算法还在

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

每步 1 个操作。

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

为了使这些操作在 O(log N ) 中进行,需要一个平衡树。

如果您试图在树定义的序列中找到下一个元素,您可能需要遍历树的整个高度,当然在平衡树中这是 O ( log N ),而在不平衡树中这是 O(N)

于 2012-05-19T12:21:24.730 回答