Die dynamische Reihung
Eine Reihung, die wächst und schrumpft — Zugriff auf jedes Element über den Index 0 … getLength() − 1.
Einfügen und Anhängen
append hängt hinten an; insertAt schiebt ein, der Rest rückt nach hinten.
Ersetzen und Löschen
setItem ersetzt ohne Verschieben; delete entfernt, der Rest rückt nach vorn.
Durchlaufen
Zählschleife über alle gültigen Indizes, Standardalgorithmen Summe, Maximum, Suche.
Löschen in Schleifen
Rückwärts laufen — sonst wird nach jedem delete ein Element übersprungen.
Letzter Index
Das letzte Element steht an getLength() − 1. getItem(getLength()) ist ein Laufzeitfehler.
Stapel und Schlange
Zwei Strukturen ohne Index: Der Stapel gibt das neueste Element zuerst heraus, die Schlange das älteste.
Stapel: LIFO
push legt oben auf, pop nimmt oben weg und liefert, top schaut nur nach.
Schlange: FIFO
enqueue stellt hinten an, dequeue entnimmt vorn, head schaut nur nach.
Typische Algorithmen
Klammerprüfung und Postorder-Auswertung mit dem Stapel, Rundlauf und Rotation mit der Schlange.
Struktur wählen
Entscheidend ist, in welcher Reihenfolge Daten wieder gebraucht werden.
Umladen dreht um
Beim Umladen auf einen Hilfsstapel dreht sich die Reihenfolge um; über eine Schlange bleibt sie erhalten.
Der Binärbaum
Jeder Knoten hat höchstens zwei Kinder. Ein Binärbaum ist leer oder besteht aus Wurzel, linkem und rechtem Teilbaum.
Begriffe
Wurzel, innerer Knoten, Blatt (beide Teilbäume leer), Kante, Teilbaum, leerer Baum.
Tiefe und Höhe
Tiefe: Kanten bis zur Wurzel (Wurzel: 0). Höhe: Anzahl der Ebenen (leerer Baum: 0).
BinTree-Operationen
Ein BinTree-Objekt ist immer ein ganzer Teilbaum; setItem auf einem leeren Baum legt zwei leere Teilbäume an.
Rekursiv rechnen
Ergebnis aus Wurzel und den Ergebnissen der beiden Teilbäume; Abbruch beim leeren Baum.
Erst prüfen, dann zugreifen
getItem(), getLeft() und getRight() auf einem leeren Baum sind Laufzeitfehler — isEmpty() kommt immer zuerst.
Die Traversierung
Jeden Knoten genau einmal verarbeiten — rekursiv, links immer vor rechts.
Preorder
Wurzel zuerst: Baum kopieren, mit Struktur ausgeben.
Inorder
Wurzel zwischen den Teilbäumen: im Suchbaum sortierte Ausgabe.
Postorder
Wurzel zuletzt: Rechenbaum auswerten (UPN), Baum löschen.
Aufwand und Rekonstruktion
Ein Aufruf je Knoten und je leerem Baum. Preorder + Inorder legen einen Baum eindeutig fest.
Nicht ebenenweise
Die Preorder geht nach der Wurzel erst ganz in den linken Teilbaum — sie liest den Baum nicht Zeile für Zeile.
Der binäre Suchbaum
Links kleiner, rechts größer — für jeden Knoten und seinen ganzen Teilbaum.
Suchen
x mit der Wurzel vergleichen: gleich → gefunden, kleiner → links, größer → rechts, leer → nicht vorhanden.
Einfügen
Suchen, bis ein leerer Baum erreicht ist; dort wird x als Blatt gesetzt. Vorhandene Werte werden nicht doppelt eingefügt.
Ausgeglichen
Alle Ebenen bis auf die letzte voll: kleinste Höhe, schnellste Suche.
Entartet
Sortiert eingefügt entsteht eine Kette: Suchen wird linear, der Aufbau quadratisch.
Ordnung für ganze Teilbäume
Es reicht nicht, nur Eltern und Kinder zu vergleichen: Auch die Enkel im linken Teilbaum müssen kleiner als die Wurzel sein.
