【发布时间】:2016-10-27 21:41:55
【问题描述】:
void level_order_recursive(struct node *t , int h) //'h' is height of my binary tree
{ //'t' is address of root node
for(int i = 0 ; i <= h ; i++)
{
print_level(t , i);
}
}
每次调用 print_level() 后,我认为递归函数被调用 (2^i) 次。所以 2^0 + 2^1 + 2^2 ....2^h 应该给出 O(2^n) 的时间复杂度。我哪里错了?
void print_level(struct node * t , int i)
{
if( i == 0)
cout << t -> data <<" ";
else
{
if(t -> left != NULL)
print_level(t -> left , i - 1); //recursive call
if(t -> right != NULL)
print_level(t -> right , i - 1); //recursive call
}
}
【问题讨论】:
-
你在这里打印的“数据”是什么:cout data
-
@meJustAndrew 它是一个整数数据。这是在我在这里没有提到的节点结构中定义的。它的递归版本的二叉树的级别顺序遍历。这段代码的时间复杂度应该是 O(n^2)。你能检查一下吗here
标签: c++ c time-complexity