1

バイナリツリーにノードを非再帰的に追加するAdd関数を作成しています。私は、1レベルの深い二分木しか生成できないという問題に遭遇しました。私はそれをデバッグしました、そして私は問題がどこにあるかを知っていますが、それを修正する方法を理解することができません。たぶん、新鮮な目は私が見ないものを見るでしょう...問題は、私の一時ノードが新しい関数呼び出しごとにルート値にリセットされ、したがってノードが線形に追加されることです。とにかく、ここに関数があります:

   void BinaryTreeNonRec::add(int num){
        treeNode *temp, *parent;

        if (root==NULL) {
            root = new treeNode;
            root->data=num;
            root->left=0;
            root->right=0;
            temp=root;
            printf("value is root \n");
        } else {
            temp=root;
            while (temp!=NULL) {
                if (num <= temp->data){
                    parent = temp;
                    temp=temp->left;
                    //root =temp;
                    printf("value is to the left \n");
                } else {
                    parent =temp;
                    temp=temp->right;
                    //root=temp;
                    printf("value is to the right \n");
                }               
            }   
            parent = new treeNode;
            parent->data=num;
            parent->left=NULL;
            parent->right=NULL;
            temp=parent;
        }   
}

どんな種類の助けにも感謝します。

4

3 に答える 3

2

新しいノードをツリーに追加するのではなく、ツリーを実行して親を新しいノードで埋めるだけですが、ツリーに追加することはありません。以下のコードを変更してください。

parent = new treeNode;
parent->data=num;
parent->left=NULL;
parent->right=NULL;
temp=parent;

に:

treeNode *newNode = new treeNode;
newNode->data = num;
newNode->left = NULL;
newNode->right = NULL;

//Now insert the new node BELOW parent
if(num <= parent->data)
    parent->left = newNode;
else
    parent->right = newNode;
于 2011-07-09T22:26:23.023 に答える
1

問題は、新しいノードをツリーに追加しないことです。

  parent = new treeNode;
  parent->data=num;
  parent->left=NULL;
  parent->right=NULL;
  temp=parent;

新しいノードを temp と parent に割り当てます。これらは一時変数であるため、関数の外には存在しません。あなたがしなければならないことは、新しい入力がどちら側にあるかに応じて、新しいノードを親->左または親->右のいずれかに割り当てて、それをツリーにリンクすることです。したがって、やりたいことは次のようなものです。

  temp = new treeNode;
  temp->data=num;
  temp->left=NULL;
  temp->right=NULL;
  if(num < parent->data)
     parent->left = temp;
  else
     parent->right = temp;
于 2011-07-09T22:28:37.453 に答える