|
|
|||||
19.6 Das Löschen von Elementen |
|||||
AllgemeinesJetzt kommt die schwierigste Methode von allen, das Löschen von Knoten des Baumes. Aber wir werden jetzt ganz systematisch vorgehen und dadurch auch dieses komplizierte Problem in den Griff bekommen. Zunächst einmal überlegen wir uns den groben Algorithmus. Das Löschen besteht aus zwei Schritten: im Schritt 1 muss der zu löschende Knoten gefunden werden, und im Schritt 2 wird der Knoten dann gelöscht. Suchen des zu löschenden ElementesDas Suchen des Elementes ist einfach und kann grob ungefähr so formuliert werden:
Löschen eines ElementesDabei ist del der Wert des zu löschenden Elementes und root der Wert der Wurzel. Man erkennt leicht, dass es sich hierbei um einen rekursiven Algorithmus handelt. Löschen des gefundenen Elementes Wir unterscheiden hier drei Fälle. Fall 1: Der zu löschende Knoten ist ein Blatt, hat also weder einen linken noch einen rechten Nachfolger. Fall 2: Der zu löschende Knoten ist ein innerer Knoten mit nur einem Nachfolger. Fall 3: Der zu löschende Knoten hat zwei Nachfolger. Schauen wir uns die drei Fälle jetzt etwas näher an. Fall 1: Löschen eines BlattesHier muss der Zeiger des Vorgängerknotens, der auf das zu löschende Blatt zeigt, auf null gesetzt werden. Weitere Einzelheiten... Fall 2: Löschen eines Knotens mit genau einem NachfolgerHier muss der left- bzw. der right-Zeiger des Vorgängerknotens auf den Nachfolger des zu löschenden Knotens gesetzt werden. Weitere Einzelheiten... Fall 3: Löschen eines Knotens mit genau zwei NachfolgernHier ist das Löschen zunächst nicht so einfach. Aber man kommt recht schnell auf eine leicht zu merkende Faustregel: Ersetze den Inhalt des zu löschenden Knotens durch den größten Wert des linken Teilbaums oder alternativ durch den kleinsten Wert des rechten Teilbaumes. Lösche anschließend den entsprechenden Knoten mit der bei Fall 1 bzw. Fall 2 beschriebenen Methode. Weitere Einzelheiten... |
Diese Webseite über Bäume wird nicht weiter entwickelt. Statt dessen können Sie die Buchversion des Skriptes gegen gleichwertiges Tauschmaterial oder einen kleinen Unkostenbeitrag Ivon mir erhalten. Den ersten Teil der Folge 19 können Sie hier kostenlos als PDF-Datei herunterladen. Schreiben Sie mir eine E-Mail, wenn Sie Interesse haben. Abiturienten NRWGehen Sie bitte auch auf die "offizielle" BinTree-Seite! |
||||
Der rekursive Lösch-Algorithmus
Ich kann Ihnen hier ein altes Pascal-Beispiel eines solchen Löschalgorithmus anbieten. Es ist nicht Ziel dieses BlueJ-Lehrgangs, das Löschen in einem BlueJ-Projekt zu implementieren; auch die Richtlinien des Landes NRW sehen nur vor, dass die Schüler ein Verfahren zum Löschen von Knoten in Binärbäumen beschreiben können. Dieses Lernziel kann man auf zweierlei Weisen erreichen, und entsprechend formuliere ich die nächste Übung, die wieder als Alternativ-Übung anzusehen ist. Die Programmier-Cracks unter Ihnen versuchen sich an einem funktionierenden Quelltext zum Löschen, und die eher an einem erfolgreichen Abitur interessierten Schüler erstellen eine Powerpoint-Präsentation zum Löschen. |
|||||
Lösungshinweise zu allen Übungen der Buchversion finden Sie in dem Lehrerband, den Sie von mir gegen einen kleinen Unkostenbeitrag erhalten können. Die Übungen der Buchversion unterscheiden sich teils erheblich von den hier veröffentlichen Übungen. Das liegt daran, dass ich die Folge 19 für die Buchversion völlig überarbeitet habe. Sehr schwere Aufgaben sind ganz herausgenommen worden, einige Aufgaben sind umformuliert worden, bei einigen Aufgaben wurde das Bewertungsschema angepasst, weil ich nämlich beim Lösen erst selbst gemerkt habe, wie schwer manche Aufgaben in Wirklichkeit sind, und einige Aufgaben sind auch ganz neu dazugekommen. |
Diese Webseite über Bäume wird nicht weiter entwickelt. Statt dessen können Sie die Buchversion des Skriptes gegen gleichwertiges Tauschmaterial oder einen kleinen Unkostenbeitrag Ivon mir erhalten. Schreiben Sie mir eine E-Mail, wenn Sie Interesse haben. Die Lösungen zu den Übungen finden Sie in dem Lehrerband, den ich zur Zeit erarbeite. |
||||
und weiter mit 19.7 - Implementierung von Bäumen mit Hilfe von Arrays |
|||||
|
Diese HTML-Seite wurde erstellt von Ulrich Helmich am 19. April 2006 |
|||||