2017-04-15 2 views
-1

私は基本的に私のツリーに数字を挿入しようとしています。最初に、コマンドinsert(root、10)を渡してから、関数が再帰的にツリーをたどって値を挿入します。トラバーサルは正常に動作しますが、ツリーは更新されません。私はすでにこのクラスに私のコンストラクタを通してツリーを構築しました。挿入機能前のツリーのインオーダートラバーサルは{0,1,2,3,4,5,6,7,8,9}であり、挿入後も同様です。この挿入機能がバイナリ検索ツリーを更新しないのはなぜですか?

機能:

private: 

node* root 

void insert(node* ptr, int num) { 
      if (ptr == NULL) { 
        ptr = new node; 
        ptr->data = num; 
        ptr->left = NULL; 
        ptr->right = NULL; 
        return; 
      } 

      else if (ptr->data >= num) { 
        insert(ptr->left, num); 
      } 

      else if (ptr->data < num) { 
        insert(ptr->right, num); 
      } 
    } 
初期ツリーを作成し、私のクラスの

プライベートメンバー

node* createTree(int array[], int start, int end) { 

      if(start > end) { 
        return NULL; 
      } 

      int mid; 
      node* newNode = new node; 

      if (((start + end) % 2) != 0) { 
        mid = ((start + end)/2) + 1; 
      } 

      else { 
        mid = (start + end)/2; 
      }  

      newNode->data = array[mid]; 
      newNode->left = createTree(array, start, mid - 1); 
      newNode->right = createTree(array, mid + 1, end); 

      cout << newNode->data << " " << newNode << endl; 

      return newNode; 
    } 

あなたは新しいノードを割り当てる際に、親が更新されたことを確認する必要があり、コンストラクタ

BST(int array[], int length) { 
      root = createTree(array, 0, length - 1); 
    } 
+0

'node'の宣言が役立つことを示しています。 [mcve]を参照してください。 – nwp

+2

'ptr'が' nullptr'の場合、新しい 'node'を割り当てて、' insert'が返った後で新しい 'node'にアクセスできないため、メモリをリークします。 – nwp

+0

これを修正するにはどうすればいいですか?私はコーディングとこのウェブサイトを初めて利用しています。私はこのサイトの人々のように、新しい人を助ける代わりに投票を下げるのが好きです。 – aashman

答えて

0

。これを行う1つの方法は、挿入がノードポインタを返すようにすることです:

node* insert(node* ptr, int num) { 
     if (ptr == NULL) { 
       ptr = new node; 
       ptr->data = num; 
       ptr->left = NULL; 
       ptr->right = NULL; 
     } else if (ptr->data >= num) { 
       ptr->left = insert(ptr->left, num); 
     } else { // ptr->data < num 
       ptr->right = insert(ptr->right, num); 
     } 
     return ptr; 
} 
+0

ありがとう!それはうまくいった。私はもともとその関数のノードへのポインタを渡そうとしましたが、何かするのを忘れたと思います。 – aashman

関連する問題