Also arbeite ich an der binären Suchbaumfunktion. Warum muss ich ein & Zeichen vor dem Knotenzeiger hinzufügen? Ich dachte, es ist bereits ein Zeiger und es zeigt bereits auf einen Ort. Ich verstehe, dass, wenn ich einen Knoten hinzufüge, ich sicherstellen muss, dass der Elternknoten auf den neuen Knoten zeigt oder der Knoten des Elternteils immer noch auf NULL zeigt. Aber warum muss ich das nicht tun, wenn ich meinen Knotenzeiger als Knoten * & übergebe?Binärer Suchbaum. Zeiger als Referenzparameter
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;
}
}
Danke
'&' ist hier kein Adressenoperator, es ist eine Referenzdeklaration. Sie müssen zurückgehen und die Erläuterung der Zeiger und Verweise in Ihrem C++ - Buch erneut lesen. Der Grund dafür, dass der Parameter eine Referenz sein muss, ist, dass beim Entfernen des Knotens der ursprüngliche Zeiger auf den zu entfernenden Knoten ersetzt werden muss, und der einfachste Weg dazu in diesem rekursiven Kontext besteht darin, eine Referenz zu verwenden . Weitere Informationen zu Referenzen finden Sie in Ihrem C++ - Buch. –
Sie übergeben den Verweis auf einen Zeigertyp "T * &", wenn Sie den Zeiger des Typs "T *" ändern müssen. Der Verweis auf den Zeigertyp ist wie ein Verweis auf einen anderen Typ. –