任何人都可以使用主方法解释下面的时间复杂度吗?
int sum(Node node) {
if (node == null) {
return 0;
}
return sum(node.left) + node.value + sum(node.right);
}
我知道一个人的价值是2,但我很难确定b和d。是b = 1而d = cO(n)?在这种情况下,任何人都可以解释如何识别b和d
答案 0 :(得分:2)
好吧,为了使递归关系不那么复杂,我们可以假设一个具有2^i
个节点的平衡二叉树,所以我们得到T(n) = 2T(n/2) + 1
的重现(忽略基本情况)。
从上面,我们可以找到 a = 2, b = 2, c = 0,因为1是O(1) 。应用主方法,它通过案例1,我们可以得到我们的复杂性 T(n)=Θ(n log 2 2 )或O(n) 强>
答案 1 :(得分:0)
这是一个用于汇总二叉树中所有节点的函数。首先从根向下离开然后向上(堆栈展开)。因此,时间复杂度为O(N),因为它需要至少访问每个节点一次。