假设树T是二叉树。
算法computeDepths(节点,深度)
输入:节点及其深度。对于所有深度,使用computeDepths(T.root,0)
调用输出:T
的所有节点的深度if node!= null
深度←node.depth
computeDepths(node.left,depth + 1)
computeDepths(node.right,depth + 1)
返回深度
结束如果
我在纸上用一个包含7个元素的完整二进制树来运行它,但我还是无法理解它的时间复杂程度。如果我不得不猜测,我会说它是O(n * log n)。
答案 0 :(得分:0)
为了了解时间复杂度,我们需要找出算法完成的工作量,并与输入的大小进行比较。在此算法中,每个函数调用完成的工作是常量(仅将给定值赋给变量)。因此,让我们计算一下这个函数的调用次数。
第一次调用函数时,它会在根上调用。
然后对于任何后续调用,函数检查节点是否为null
,如果它不为空,则相应地设置深度并设置其子节点的深度。然后这是递归完成的。
现在请注意,该函数在树中每个节点调用一次,加上叶子数的两倍。在二叉树中,叶子的数量为n/2
(向上舍入),因此函数调用的总数为:
n + 2 *(n / 2)= 2n
所以这是算法完成的工作量。所以时间复杂度为O(n)
。