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

时间:2016-11-25 02:41:05

标签: algorithm time complexity-theory pseudocode

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

1 个答案:

答案 0 :(得分:0)

是O(n)

为了了解时间复杂度,我们需要找出算法完成的工作量,并与输入的大小进行比较。在此算法中,每个函数调用完成的工作是常量(仅将给定值赋给变量)。因此,让我们计算一下这个函数的调用次数。

第一次调用函数时,它会在根上调用。

然后对于任何后续调用,函数检查节点是否为null,如果它不为空,则相应地设置深度并设置其子节点的深度。然后这是递归完成的。

现在请注意,该函数在树中每个节点调用一次,加上叶子数的两倍。在二叉树中,叶子的数量为n/2(向上舍入),因此函数调用的总数为:

  

n + 2 *(n / 2)= 2n

所以这是算法完成的工作量。所以时间复杂度为O(n)