证明对树继任者的K连续调用需要O(k + h)时间。由于每个节点最多访问两次,所访问节点数的最大界限必须为2k。时间复杂度必须是O(k)。我不知道O(h)即将来临的因素。是因为访问过但不是后继的节点。我不能完全解释自己O(h)因素如何参与整个过程
PS:我知道这个问题已经存在,但我无法理解解决方案。答案 0 :(得分:3)
另外,O(k+h)
符号是另一种写作O(MAX(k, h))
的形式。
找到一个继任者可能需要O(h)
时间。要了解为什么这是真的,请考虑一种情况,当您在寻找根的左子树的最右边节点的后继时:它的后继位于右子树的底部,因此您必须遍历树的高度两次。这就是您需要在计算中加入h
的原因:如果k
与h
相比较小,那么h
将主导算法的时间安排。
练习的目的是证明连续调用后继k
次的时间是而不是 O(k*h)
,正如人们在观察到之后可以想象的那样单次通话最多可能需要O(h)
。您可以通过显示遍历树高度的成本在k
调用中分配来证明它,就像您注意到每个节点最多访问两次一样。