私は基本的に私のツリーに数字を挿入しようとしています。最初に、コマンド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);
}
'node'の宣言が役立つことを示しています。 [mcve]を参照してください。 – nwp
'ptr'が' nullptr'の場合、新しい 'node'を割り当てて、' insert'が返った後で新しい 'node'にアクセスできないため、メモリをリークします。 – nwp
これを修正するにはどうすればいいですか?私はコーディングとこのウェブサイトを初めて利用しています。私はこのサイトの人々のように、新しい人を助ける代わりに投票を下げるのが好きです。 – aashman