2017-07-12 2 views
0

So ist meine Frage wie folgt: Wenn ich den Code für diese Insert-Helper-Methode ausführen, und ich bin positiv, meine neue Knotenmethode ist richtig, wie es für die Instanziierung eines binären Suchbaums funktioniert, keine Knoten sind eingefügt. Warum kann ich diese bestimmte Implementierung nicht verwenden? Was läuft hier falsch?binäre Suche Tree Insert-Implementierung

Ich weiß, wie man die andere Insert-Implementierung verwendet, wo man nach den linken und rechten Knoten der Wurzel suchen würde und ob sie null sind oder nicht, aber das Problem dieser eleganteren Möglichkeit nicht herausfinden kann. Die Antwort darauf wird mir helfen, andere Funktionen zu erstellen, die über den Umfang der Einfügefunktion hinausgehen.

btw ja, ich habe eine andere Funktion Aufruf dieser Hilfsfunktion

Dank !!!!!

//INSERT METHODS 
void BinarySearchTree::insert(int data, struct node* root) { 
//If root is null make new node there 
if (!root) { 
    root = new node(data); 

} 
else if (root -> data > data) { 
    insert(data, root -> left); 
} 
else { 
    insert(data, root -> right); 
} 

}

Antwort

0

Die Variable root ist ein Parameter, der nur lokale Sichtbarkeit für diesen einen Methodenaufruf hat. Bedeutung root = new node(data) wird in der Tat einen neuen Knoten erstellen, auf den aber nur der Parameter zeigen wird. Ihre Methode gibt nichts zurück und weiß nicht, was sie mit diesem neuen Stammobjekt tun soll (es ist NICHT dasselbe wie irgendeine Klassenvariable, die Sie vielleicht definiert haben).

Sie erstellen also einen neuen Knoten, können ihn jedoch nicht außerhalb dieses einen Methodenaufrufs verwenden. Was zu einem leeren Baum führt.

Als eine Randnotiz für zukünftige Fragen: Fügen Sie ein Tag für die von Ihnen verwendete Programmiersprache ein. Viele Leute nutzen das als Filter, so dass Sie tatsächlich mehr Leute sehen, wenn Sie das richtige Tag verwenden.

+0

Vielen Dank für die Tipps, sehr geschätzt – tsalemy