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)に与えるはずです。どこが間違っていますか?時間計算量はO(N^2)となるが、各レベルの時間複雑度(n)は> O BE- + O(N-1れるように、2^Nすることができない最悪の場合次のコードの時間複雑さがなぜO(n^2)になるのですか?
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
}
}
:漸化式を用いて
は、次の証明を取得<< t ->データ<<」COUT「; ?それは複雑さの値ですか?また、なぜあなたは間違っていると思いますか?あなたの計算からは本当にO(2^n)です。 – meJustAndrew
@meJustAndrewその整数データです。これは私がここで言及していないノード構造で定義されています。バイナリツリーのレベル順走査の再帰的なバージョン。このコードの時間複雑さはO(n^2)であると考えられます。あなたはそれをチェックしてください[ここ](http://www.geeksforgeeks.org/level-order-tree-traversal/) –