私はバイナリ検索ツリー機能に取り組んでいます。なぜノードポインタの前に&記号を追加する必要がありますか?私はそれが既にポインタであり、すでにある場所を指していると思った。私は、ノードを追加すると、親ノードが新しいノードを指していることを確認する必要があります。そうでない場合、親ノードは引き続きNULLを指しています。しかし、ノード・ポインタをノード* &として渡すと、私はそれをしなければならないのですか?バイナリ検索ツリー。参照パラメータとしてのポインタ
bool bst::remove123(int data, node*& x)
{
if (x == NULL)
{
return false;
}
else if (x->getData() < data)
{
return remove123(data, x->right);
}
else if (x->getData() > data)
{
return remove123(data, x->left);
}
else
{
node* old = x;
if (x->left == NULL)
{
x = x->right;
}
else if (x->right == NULL)
{
x = x->left;
}
else
{
replacement(old, x->left);
}
delete old;
return true;
}
}
ここでは、 '&'はアドレス演算子ではありません。参照宣言です。あなたは戻って、あなたのC++の本でポインターとリファレンスの説明を読み返す必要があります。パラメータが参照である必要がある理由は、ノードが削除されたときに、削除されるノードへの元のポインタを置き換える必要があり、この再帰コンテキストで最も簡単な方法は、参照を使用することです。参照の詳細については、C++の本を参照してください。 –
'T *'型のポインタを変更する必要があるときは、ポインタ型 'T *&'への参照を渡します。ポインタ型への参照は他の型への参照と同じです。 –