Jeden Knoten genau einmal besuchen
Eine Reihung durchläuft man mit einer Zählschleife von vorn nach hinten. Ein Baum hat kein „vorn“ und „hinten“ — man muss festlegen, wann die Wurzel an der Reihe ist.
- Traversierung:jeden Knoten eines Baums genau einmal verarbeiten, z. B. ausgeben.
- Preorder:W – L – R: erst die Wurzel, dann linker, dann rechter Teilbaum.
- Inorder:L – W – R: die Wurzel steht zwischen den beiden Teilbäumen.
- Postorder:L – R – W: die Wurzel kommt ganz zum Schluss.
- Umrundung:Man fährt den Baum links herum ab und berührt jeden Knoten dreimal: links, unten, rechts.
Starte die Umrundung mit ▶ oder ziehe den violetten Schieber auf dem Band. Das Band ist die abgewickelte Umrundung: blau = links am Knoten vorbei, grün = unten, orange = rechts. Wähle die Reihenfolge — die Ausgabe sammelt genau die Berührungen dieser Farbe.
Halte fest: Alle drei Traversierungen laufen denselben Weg um den Baum. Sie unterscheiden sich nur darin, bei welcher der drei Berührungen ein Knoten ausgegeben wird.
Traversierung: Jeder Knoten wird genau einmal verarbeitet. Preorder W – L – R · Inorder L – W – R · Postorder L – R – W. Links wird immer vor rechts besucht; nur die Stelle der Wurzel wandert.
Umrundung: Man fährt den Baum links herum ab und berührt jeden Knoten dreimal (links, unten, rechts); die Ordnungen unterscheiden sich nur darin, bei welcher Berührung ausgegeben wird.
Rekursiv traversieren
Die Definition des Binärbaums ist rekursiv — deshalb ist es die Traversierung auch: Teilbäume werden mit derselben Methode bearbeitet.
- Abbruch:Der leere Baum wird nicht bearbeitet — die Methode tut dann nichts.
- Rekursionsschritt:Wurzel verarbeiten und beide Teilbäume rekursiv traversieren — in der gewählten Reihenfolge.
- Nur eine Zeile wandert:Für Inorder steht die Ausgabe zwischen den beiden Aufrufen, für Postorder nach beiden.
static void preorder(BinTree<String> b) {
if (!b.isEmpty()) {
System.out.print(b.getItem() + " "); // W: Wurzel verarbeiten
preorder(b.getLeft()); // L: linken Teilbaum
preorder(b.getRight()); // R: rechten Teilbaum
}
}
// Baum 1 aus dem Applet — preorder: M F B K H S W
// inorder: B F H K M S W
// postorder: B H K F W S M
- Preorder nutzen:Baum kopieren oder mit Struktur ausgeben — die Wurzel muss zuerst da sein.
- Inorder nutzen:Im Suchbaum liefert sie alle Werte sortiert.
- Postorder nutzen:Rechenbaum auswerten oder Baum löschen — erst die Teilbäume, dann die Wurzel.
Rekursive Traversierung: Abbruch beim leeren Baum (nichts tun); sonst Wurzel verarbeiten und beide Teilbäume mit derselben Methode traversieren.
Reihenfolge: Nur eine Zeile wandert — bei Inorder steht die Ausgabe zwischen den beiden Aufrufen, bei Postorder nach beiden.
Einsatz: Preorder zum Kopieren, Inorder liefert im Suchbaum alle Werte sortiert, Postorder zum Auswerten eines Rechenbaums oder Löschen.
\(A=n+(n+1)=2n+1\)
Allgemeine Hinweise
Nicht Ebene für Ebene
Preorder liest den Baum nicht zeilenweise von oben nach unten. Nach der Wurzel geht es erst ganz in den linken Teilbaum hinab.
Abbruch vergessen
Fehlt die Prüfung isEmpty(), ruft die Methode getItem() auf einem leeren Baum auf — Laufzeitfehler statt Ausgabe.
Schnell von Hand
Zeichne die Umrundung und setze an jeden Knoten einen Punkt links (Pre), unten (In) oder rechts (Post). Dann nur noch die Punkte in Laufrichtung ablesen.
