假设树T是二进制树。
算法计算epepths(节点,深度)
输入:节点及其深度。对于所有深度,请使用计算机(T.Root,0)
致电输出:T
的所有节点的深度如果节点!= null
深度←node.depth
computeDepths(node.left,depth 1)
computeDepths(node.right,depth 1)
返回深度
如果
结束
我用包含7个元素的完整而完整的二进制树在纸上运行它,但我仍然无法将其围绕在什么时间复杂。如果我不得不猜测,我会说是O(n*log n)。
它是o(n)
要了解时间复杂性,我们需要找出与输入大小相比,算法完成的工作量。在此算法中,每个功能调用完成的工作是恒定的(仅将给定值分配给变量)。因此,让我们计算调用函数多少次。
第一次调用该函数时,它在根上调用。
然后,对于任何后续呼叫,该函数检查节点是否为 null
,如果不是null,则相应地设置深度并设置其子女的深度。然后这是递归完成的。
现在请注意,该函数在树上的每个节点调用一次,再加上叶子数的两倍。在二进制树中,叶子的数量为 n/2
(四舍五入),因此功能总数为:
n 2*(n/2)= 2n
因此,这是算法完成的工作量。因此,时间复杂性是O(n)
。