1

こんにちは私はBSTを書いていて、子を追加するための次の関数を書きました。

void addChild(T value)  
{  
  temp = root;  
  while(0 != temp)  
  {  
     temp1 = temp;  
     if(value  > temp->getValue())  
          temp = temp->getRightChild();   
      else  
           temp = temp->getLeftChild();  
  }  
  if(temp1->getValue() > value)  
  {   
       temp1->setRightChild(new Child(value));  
  }  
  else  
  {  
       temp1->setLeftChild(new Child(value));  
  }  
}  

入力として「23 12 122 1 121 15」を与えています。ルートは、クラスのコンストラクターで作成しているノード 23 です。

問題:ツリー トラバーサルを行っているときに、出力として 23 と 15 しか得られません。 質問: この関数で何が間違っていますか?

4

3 に答える 3

1

試す:

if(value > temp1->getValue()) 

...それ以外の場合、挿入条件は、上記のループ内のスポットの検索とは異なります。

于 2010-12-23T09:47:11.900 に答える
1

条件が混じっています。

if(value > temp->getValue()) : getRight

の反対です

if(temp1->getValue() > 値) : setRight

最後の条件を変更してみてください。

于 2010-12-23T09:47:52.883 に答える
0

Captain と sje による以前の回答には同意しますが、彼らはあなたのツリーの深刻な人口不足を説明していません。考えられる問題は、値をtemp1の子として追加し、前の子を完全に破棄することです。これはおそらく T::setRightChild() および T::setLeftChild() 関数で行われます。

于 2010-12-23T09:52:41.957 に答える