2017-01-30 10 views
0

私の解決策は、問題へのプロンプトがあなたを挿入後、ツリーのルートを返すことになっていると言う私のバイナリツリー挿入ロジックの欠陥はどこにありますか?

/* 
Node is defined as 

typedef struct node 
{ 
    int data; 
    node * left; 
    node * right; 
}node; 

*/ 


node * insert (node * root, int value) 
{ 
    bool inTreeAlready = false; 
    node * cur = root; 
    while(cur != NULL) 
    { 
     if(cur->data < value) 
      cur = cur->right; 
     else if(cur->data > value) 
      cur = cur->left; 
     else 
     { 
      inTreeAlready = true; 
      break; 
     } 
    } 
    if(!inTreeAlready) 
    { 
     cur = new node; 
     cur->data = value; 
     cur->left = NULL; 
     cur->right = NULL; 
    } 
    return root; 
} 

のようなものです。

出力は非常にわかりやすいではありません

Wrong Answer! 
Some possible errors: 
1. You returned a NULL value from the function. 
2. There is a problem with your logic 
3. You are printing some value from the function 

あるので、これは明らかに間違っています。

私のロジックを二重にチェックして、取引が何であるか分かりません。

+1

新しいノードを作成していますが、実際にはノードにリンクされていません。それは 'ルート'から到達することができません - それは単に漏れている。空のツリー( 'root == NULL')で始めると、空のツリーでも終わります(' 'root''はまだ' 'NULL''です).-最初のノードも決して取得しません。 –

+0

それは奇妙ですこのコードは 'printf'呼び出しを持っていないので何かを出力します。 – immibis

答えて

0

新しいノードをツリーに追加しませんでした。ここに改訂版があります。

+0

そして、私はこの全部をC#lolの5〜7行でやったことができたと思う。 C++が大好きです。 – user7127000

+0

@ user7127000 "5-7 lines"で正確に何をしますか?使用されている言語にかかわらず、コードに関する問題は、新しいノードをツリーにリンクしていないことです。言語を使っても、ノードをコードなしでツリーの一部にすることは魔法のようになりました。 – PaulMcKenzie

+0

@ user7127000私はそれを1行にすることができます(もちろんセミコロンはいくつかあります)。 ;-) 冗談だ。 1つのタスクが1つの言語でとても複雑に見えますが、別の言語ではかなりシンプルになることに同意します。 – Shiping