答案 0 :(得分:3)
所有四个都是O(n)(忽略两个最佳案例问题应该使用Ω(n)),因为你必须检查每个节点。
考虑height
:您必须递归检查每个子树,只有在到达树的底部时才会终止。这意味着你最终会到达每个叶子节点。你不能提前终止。
同样适用于balanced
;如果没有首先验证每个子树是否平衡,则无法验证树是否平衡,在此实现中,这意味着为每个子树调用height
。
现在考试的措辞。 Big O表示法用于最坏情况,因为最坏的情况(根据定义)比所有其他情况“更大”。最坏情况的上限必然是所有情况的上限。同样,根据定义,最好的情况是“小于”所有其他情况。最佳案例的上限几乎是无用的,因为你无法对剩下的案例说些什么。
在谈论最佳案例时,使用Ω(大欧米茄)表示法,它提供较低界限。说最好的情况是Ω(n)告诉你,无论最好的基数(因此每个案例)有多好,它都不小于n。
对于height
和`balance,你实际上可以证明最好的情况是Ω(n)和最坏的情况是O(n)。在这种情况下,你可以将它们组合起来并说每个都是Θ(n);上限和下限匹配。
答案 1 :(得分:0)
height()
最好的情况:左右树都是空的。因此,O(1)
进行单一最大比较,但从技术上讲,n = 1
,您可以说O(n)
。
最坏情况:当两者都不为空时,必须完全遍历左右树。 O(n)
就我所知,balanced()
也是如此。