Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Höchsten Knoten aus Binary Search Tree löschen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
22.11.2006, 19:44 Uhr
mathon



Hallo,

ich implementiere gerade einen Binary Search Tree, der double Numbers in den einzelnen Knoten speichert.
Nun bin ich gerade dabei eine Funktion zu schreiben, die den größen Knoten aus dem Tree löscht. Ich habe dies so versucht:

Code:
template <class Item>
void bst_remove_max(binary_tree_node<Item>*& root_ptr, Item& removed)
// Precondition: root_ptr is a root pointer of a non-empty binary
// search tree.
// Postcondition: The largest item in the binary search tree has been
// removed, and root_ptr now points to the root of the new (smaller)
// binary search tree. The reference parameter, removed, has been set
// to a copy of the removed item.
{
    binary_tree_node<Item> *cursor;
    cursor = root_ptr;
    if(root_ptr != NULL)
    {
        if(cursor->right() == NULL)
        {
            root_ptr = root_ptr->left();
            delete cursor;
        else
        {
            bst_remove_max(cursor->right(), removed);
        }
    }      
}



Würdet ihr das auch so machen bzw. wäre dieses funktion so korrekt? - bin mir nicht sicher ob ich da noch einen denkfehler drinnen habe.

lg matti
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.11.2006, 20:46 Uhr
BoBtheREapER
kein job für nen BoB


wenn du den höchsten knoten aus einem binärbaum löscht, wie willst du denn dann noch auf deinen baum zugreifen? oder verstehe ich dich da falsch?
--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.11.2006, 20:59 Uhr
Blubber2063



Du musst auf jeden Fall wieder eine neue Wurzel festlegen, die frage ist nur ob du einen balancierten oder unbalancierten Baum schreibst, wenn du ihn balancierst musst du die Balance Operation danach wieder über den Baum laufen lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.11.2006, 21:30 Uhr
mathon



Ich meine eigentlich nicht den höchsten knoten, sondern den knoten im binary search tree, der die höchste double number gespeichert hat. das muss nicht unbedingt der wurzelknoten sein. verstehst du was ich meine...?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.11.2006, 23:15 Uhr
Blubber2063



Nunja auch hier ist die grundsätzliche Idee, nimm entferne den Knoten und nimm einen der beiden Unterbäume und häng die Knoten um, danach wenn er balanciert sein soll, wieder die Balancingoperation.

Falls deine Löschoperation richtig implementiert ist, ist dein Code schon richtig, da du ja den größten Wert nimmst, in dem du nach ganz Rechts verzweigst. Vorrausgesetzt das einfügen war korrekt.

Dieser Post wurde am 22.11.2006 um 23:18 Uhr von Blubber2063 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.11.2006, 00:28 Uhr
mathon



was meinst du damit vorausgesetzt meine lösch-funktion ist richtig...? - ich verwende in dieser funktion keine andere lösch funktion außer das standardmäßige delete..?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.11.2006, 00:59 Uhr
mathon



was mir auch nicht ganz klar ist, für was ich den parameter removed benötige, da ich ja einfach den knoten mit der höchsten zahl lösche....??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.11.2006, 08:34 Uhr
Blubber2063



Hab da wohl was übersehen, du reagierst ja gar nicht auf den Normalfall, dass der größte Wert auf der rechten Seite im letzten Unterbaum steht und nicht im linken. wenn du diesen Code über einen rechts degenerierten Baum laufen lässt dürftest du ohne den Wert zu entfernen abbrechen.
Dieser Post wurde am 23.11.2006 um 08:37 Uhr von Blubber2063 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.11.2006, 15:47 Uhr
mathon



aso okay, diese funktion verwirrt mich etwas... kannst du mir vielleicht zeigen, wie das korrekt in code-form aussehen müsste..?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.11.2006, 19:30 Uhr
Blubber2063



Blub vergiss es heute morgen im Halbschlaf wieder nur halb aufgepasst, stimmt schon so. Ich schlaf einfach zu wenig zur Zeit .
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: