Zwischenspeichern eines Objektes
-
Ich möchte einen Pointer auf einen Knoten in einem Binärbaum (T) löschen, ohne seinen rechten Unterknoten (T->right) zu löschen (mit delete) und möchte ihn sogesehen beibehalten.
Da ich nicht wirklich viel Erfahrung mit C++ habe, fällt mir gerade keine Methode ein, das T->right ordentlich zwischenzuspeichern (das war mein Versuch dort mit "Tree* Temp ...")
Ich wäre sehr dankbar, wenn mir jemand helfen könnte, das ordentlich zu schreiben und dass es funktioniert
So wie ich es hier habe funktioniert es leider nicht:
else if (T->right != NULL) { Tree* Temp = T->right; delete T; T = Temp; }
-
So, so. Es funktioniert nicht.
Vielleicht brauchst du Hilfe?
-
Glaskugel:
else if (T->right != NULL) { Tree* Temp = T->right; T->right = NULL; // C++: nullptr, nicht NULL delete T; T = Temp; }
-
@Wurstwasser701 Das Problem ist, dass deine gezeigten Codezeilen auf den ersten Blick korrekt aussehen (bzw. man es nicht genau weiß, weil man dazu die Klasse
Tree
kennen müsste).Also korrekt in dem Sinne, dass das, was du erreichen willst, vermutlich damit aus erreicht wird - und der Fehler somit anderswo zu suchen ist.
Generelle Dinge, die aber nichts mit deinem Problem zu tun haben:
- Wenn du C++ machst, verwendest du NICHT
NULL
oder0
, sondernnullptr
(das ist typsicher). Bei einem Vergleich auf!= nulltpr
kannst du das!= nullptr
aber auch weglassen. Alsoif (T->right)
. - ich würde dir immer raten, Variablen mit Kleinbuchstaben und Klassen mit Großbuchstaben zu beginnen. Insbesondere wird ein
T
in C++ häufig als Typ eines Template-Parameters verwendet. Ich würde daher eine Variable nichtT
nennen. - bist du sicher, dass das Baum-Modell richtig ist? Ist der Baum nicht eher das ganze Ding, das als Member eine Node
root
hat (bzw. einen Pointer, weil die root-Node ja auch fehlen darf) - d.h. dass man eine separate KlasseNode
verwendet, dieleft
,right
undvalue
als Werte hat?
- Wenn du C++ machst, verwendest du NICHT
-
@wob Ich habe den Fehler schon gefunden, habe es einfach nochmal neu gemacht und alles genau nachvollziehbar mit Konsolenausgaben kontrolliert. Trotzdem danke dir