我需要 CLRS Algorithms 书中关于这个练习的提示:
证明无论我们从高度为 h 的二叉搜索树中的哪个节点开始,对 Tree-Successor 的k次连续调用都需要O(k+h)时间。
我需要 CLRS Algorithms 书中关于这个练习的提示:
证明无论我们从高度为 h 的二叉搜索树中的哪个节点开始,对 Tree-Successor 的k次连续调用都需要O(k+h)时间。
x
成为开始节点并z
成为结束节点。k
p
之间的简单路径。x
z
y
成为x
和z
那次p
访问的共同祖先。p
最多为2h
,即O(h)
。output
是它们的值介于x.key
和z.key
包含之间的元素。output
为O(k)
。k
对 TREE-SUCCESSOR 的连续调用的执行中,访问了 in的节点,p
并且除了节点和,如果访问了节点 in 的子树,则其所有元素都在 in 。x
y
z
p
output
O(h+k)
。提示:做一个小例子,观察结果,尝试推断原因。
要开始,这里有一些事情需要考虑。
从某个节点开始,对 Tree-Succcesor 的 k 次连续调用构成了部分树遍历。这次步行访问了多少(至少和最多)节点?(提示:想想key(x))。请记住,一条边最多被访问两次(为什么?)。
最后提示:结果是O(2h+k)
.