So löschen Sie einen binären Suchbaum aus dem Speicher?
Ich habe eine BST, die eine verknüpfte Liste in C++. Wie würde ich löschen, das ganze aus dem Gedächtnis? Wäre es von einer Klasse Funktion?
- Eine verknüpfte Liste von definition hat nach vorne und vielleicht rückwärts-links. Ein BST verlassen hat Kind, Rechtes Kind, und vielleicht auch Eltern-links. Welche ist es?
- Meine BST hat Knoten kann einen linken Kind, Rechtes Kind, und die Eltern links.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löschen Sie einfach die Kinder:
oder wenn Sie
unique_ptr
oder so, das ist auch nicht nötig:auto_ptr
, das würde erreicht werden, nur durch die Zuweisung zBauto_ptr<TreeNode> outside_ptr = my_node.l
.auto_ptr
seltsam Semantik...const TreeNode& node = ...; TreeNode copy(node); node.l->data;
Absturz (hoffentlich unmittelbar).auto_ptr
Objekt ist die...
im code, keineauto_ptr
Semantik in all dem.auto_ptr
Zuweisung verwendet wird, fürdetach
, als Scott und ich nur erwähnt. Sie wollen nicht, um den Zugriff auf eine ungültig Zeiger post-detach
. (auto_ptr
ausnahmslos implementiertmove
Semantik und wird überholt von C++0x ist allgegenwärtig-support in dieser Hinsicht, zur Kenntnis genommen.)TreeNode
basierend aufauto_ptr
, damit der Kopie-Konstruktor erstellt automatisch fürTreeNode
durch den compiler wird auf der Grundlage der copy-Konstruktor vonauto_ptr
mit seinem bastard-semantische, in der Bildung voncopy
, undnode
am Ende wird geändert, trotzconst
das ist definitiv seltsam. Ich bin alle für die Verwendung von smart Pointer hier, aber leider haben Sie immer noch zu notieren, die Kopie-Konstruktor und Zuweisungsoperator von selbst, wenn Sie möchten, eine korrekte semantische.Wenn Sie Zugang zu der verlinkten Liste selbst, es ist ein Stück Kuchen:
Wenn dies eine benutzerdefinierte Implementierung eines BST, dann kann dies gut sein, wie es intern arbeitet, wenn es gebunden hat sich auf eine bestimmte Datenstruktur.
Wenn Sie keinen Zugriff auf die Interna, dann Potatoswatter, die Antwort sollte vor Ort auf. Vorausgesetzt, die BST-setup, wie Sie vorschlagen, dann einfach das löschen der root-Knoten sollte automatisch löschen Sie alle Speicher zugewiesen, wie jeder Elternteil den Baum hinunter löschen Ihrer Kinder.
Wenn Sie sich Fragen, wie Sie gehen über die Iteration über eine binäre Struktur manuell, dann würden Sie die folgenden rekursiven Schritt:
Ich hoffe, ich habe nicht den Punkt verpasst hier und das etwas davon hilft.
Durchführen einer post-order-Traversierung des Baumes (D. H. den Besuch der Kinder vor den Eltern), und löschen Sie jeden Knoten als Sie es besuchen.
Ob oder nicht das hat nichts zu tun mit Klassen hängt ganz davon ab, Ihre Umsetzung.
Mit den begrenzten Informationen ....
Wenn Sie den zugewiesenen Knoten mit new oder malloc (oder Funktionen), als Sie brauchen, um die traverse über alle Knoten und kostenlos oder zu löschen.
Alternative ist shared_ptr und weak_ptr ist zu töten, cyclene) in Ihren Zuordnungen-sofern Sie es richtig machen werden Sie nicht haben, um die Knoten manuell
Wenn Sie eine hochwertige Umsetzung, dass Sie abgeholt auf dem internet, als er die Klassen nicht Auslaufen, Sie müssen nicht um nichts zu kümmern.
Verwendung der smart-Pointer, und vergessen Sie es.