Big o 级序遍历的复杂性

Big o 级序遍历的复杂性,big-o,complexity-theory,Big O,Complexity Theory,用于打印特定级别的函数 void printGivenLevel(struct node* root, int level){ if(root == NULL) return; if(level == 1) printf("%d ", root->data); else if (level > 1) { printGivenLevel(root->left, level-1); printGivenLeve

用于打印特定级别的函数

void printGivenLevel(struct node* root, int level){
   if(root == NULL)
      return;
   if(level == 1)
      printf("%d ", root->data);
   else if (level > 1)
   {
      printGivenLevel(root->left, level-1);
      printGivenLevel(root->right, level-1);
   }
}
用于打印所有级别顺序遍历的函数

void printLevelOrder(struct node* root)
{
   int h = height(root);
   int i;
   for(i=1; i<=h; i++)
      printGivenLevel(root, i);
}
这里我想计算函数printLevelOrder的复杂度。 我引用它的资源说它运行在2上。我不知道怎么做。 因为若我应用master的减法定理来计算方法1的复杂度,结果是2ⁿ 当Tn=2时⋅Tn-1


如果我走错路了,请纠正我。

假设我们有一个有n个节点的歪斜树。比如:

一, \ 2. \ 3. \ 4. . . N

现在这棵树有n个级别。对于每个级别i,您调用PrintGivenLevel i,它将通过级别1到级别i的所有节点,最终打印级别i上的节点

因此,对于级别n,您需要花费cn时间通过n个节点。 对于n-1级,您将使用cn-1时间通过n-1节点 等等


所以总时间=cn+n-1+n-2+3+2+1~cn2=On2

我可以帮你设置格式:如果你在chrome上,这里还有一个便利的工具,这篇文章有很多。非常感谢Abcaefchen和Adrian的支持!!对不起,我知道你想说什么了。但是当我试图通过大师的减法定理来接近它时,为什么它失败了呢?我想你写的递推关系可能是错误的。对于上面所示的情况I,重现期为Tn=Tn-1+c。据我所知,你们写了一个循环,在脑海中有一种完整的二叉树->2*Tn-1,其中2是->1表示左子代+1表示右子代,对吗?如果是这种情况,那么递归调用中的节点数不再是n-1。这相当于~n/2。更像是Tn=2Tn/2+c