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;
            }
    

  • Mod

    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 oder 0, sondern nullptr (das ist typsicher). Bei einem Vergleich auf != nulltpr kannst du das != nullptr aber auch weglassen. Also if (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 nicht T 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 Klasse Node verwendet, die left, right und value als Werte hat?


  • @wob Ich habe den Fehler schon gefunden, habe es einfach nochmal neu gemacht und alles genau nachvollziehbar mit Konsolenausgaben kontrolliert. Trotzdem danke dir 🙂


Log in to reply