0

データを BST に挿入する関数を作成しましたが、正常に動作します。「参照渡し」を使用しましたが、「head」の値は挿入ごとに変更されるはずです。ただし、「ヘッド」は常に挿入した最初の値を指していることがわかりました。「頭」が挿入した最初のデータを指す原因を説明できる人はいますか?

void insert(node *&head, int val){
if(head == NULL){
    head = newNode(val);
}
else{
    if(val <head->data)
        insert(head->left,val);
    else
        insert(head->right,val);
}
}
4

2 に答える 2

0
void insert(node *&head, int val){
if(head == NULL){
    head = newNode(val); // when you call insert() with pointer to root
                         // which is NULL this will create root node
}

次に、ルートノードにデータを追加すると(もうNULLではありません)

else{ // this will be called and this doesn't create new root node
      // but just create nodes at its left or right side 
    if(val <head->data)
        insert(head->left,val);
    else
        insert(head->right,val);
}
}
于 2013-10-06T22:07:44.530 に答える
0

それが関数の動作方法であり、head決して変更しないでください。そうしないと、ツリーのルートを見失うことになります。

headルートを指している限り、ツリー全体にアクセスできます。

値が変化しない理由は、あなたが書いているときですinsert(head->left,val);

に新しい値を割り当てるのではなくhead、左の子への参照を次の関数呼び出しに渡すだけです。

于 2013-10-06T22:07:07.027 に答える