Vier Funktionen · ein Rekursionsgerüst

Suchbaum
unter der Lupe

12 / 17

Mission

Du steuerst den Baum selbst. Finde erst den größten Wert, dann den schwersten Wurzel-Blatt-Pfad und seine Länge. Zum Schluss schneidest du den Baum auf eine Höhe zurück.

Knoten = eine Box. Wurzel = oberste Box. Blatt = Box ohne Kinder. Höhe und Pfadlänge zählen hier Knoten.

struct sb_node {
    sb_node* left;      // linkes Kind
    unsigned int val;  // positiver Wert
    sb_node* right;     // rechtes Kind
};
struct suchbaum { sb_node* root; };

// vorhanden und benutzbar:
void sb_clear(sb_node* n);

Direkte Manipulation

Klicke deinen Weg

Start: Wo liegt im Suchbaum das maximale Element?

Dein Trace: —

Maximum im Suchbaum

Klicke oben im Baum den Weg von der Wurzel zum maximalen Element.

Suchbaum-Regel in Alltagssprache: kleinere Werte links, größere rechts.
Solange ein rechtes Kind existiert, gehst du rechts. Stoppe auf dem letzten Knoten, nicht erst hinter ihm.

Maximale Pfadsumme

Jetzt zählen vollständige Pfade von der Wurzel bis zu einem Blatt. Welcher Ast gewinnt?

Rechne jeden Wurzel-Blatt-Pfad als Summe. Ein innerer Knoten ist noch kein fertiger Pfad.
Die Rekursion fragt links und rechts dieselbe Frage und nimmt dann max(links, rechts).

Länge des schwersten Pfads

Die Hilfsfunktion muss Summe und Länge nach oben tragen. Ergänze den Rückgabewert für einen leeren Teilbaum.

if (n == nullptr) return paar{,};
Ein leerer Teilbaum trägt weder Wert noch Knoten bei.
first speichert die Summe, second die Anzahl der Knoten. Beide neutralen Werte sind 0.

Trim auf Höhe 2

Klicke im Baum alle Knoten an, die entfernt werden müssen, damit nur zwei Ebenen bleiben.

Die Wurzel hat Höhe 1. Ihre Kinder liegen auf Höhe 2 und bleiben.
Bei Resthöhe 1 werden beide Unterbäume mit sb_clear gelöscht und beide Zeiger auf nullptr gesetzt.

Prüfungsabschluss: kompletter Code

Erst nach allen vier Werkstatt-Schritten wird die vollständige Musterlösung freigegeben.

Wie sitzt Aufgabe 12?

Noch nicht markiert.