此算法(伪代码)的时间复杂度是多少?



假设树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)

最新更新