我对通过二叉搜索树踩踏前进和倒退的最坏情况效率感兴趣。
不平衡的树:
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)?
答案 0 :(得分:3)
我是否正确地认为任何BST的最坏情况是O(高度-1),平衡树的O(log n)和不平衡树的O(n-1)?
是的,从k
到k+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)