MINT lernen

Das Prinzip Binärbaum

Zwei Abituraufgaben zum Binärbaum — vom Morsealphabet bis zur Ahnentafel.

Dein Fortschritt:
0 / 0 Aufgaben
1

Der Morsebaum

AFB I–II

Im Morsealphabet wird jeder Buchstabe durch eine Folge aus Punkten „.“ und Strichen „-“ dargestellt. Ein Programm zum Entschlüsseln speichert die Buchstaben in einem Objekt morse der Klasse BinTree<String> (Ergänzende Hinweise 2025). Beginnend an der Wurzel führt jeder Punkt in den linken, jeder Strich in den rechten Teilbaum; der erreichte Knoten enthält den Buchstaben.

Material: Ausschnitt des Morsebaums (links = Punkt „.“, rechts = Strich „-“)
SIUERAW▪DNKTGMO
Die Wurzel (▪) enthält den leeren Text; jede Kante nach links steht für „.“, nach rechts für „-“.
  1. Beschreiben Sie den abgebildeten Baum mit den Fachbegriffen Wurzel, innerer Knoten, Blatt und Höhe. Geben Sie dazu die Anzahl der Knoten und der Blätter an. 4 BE
  2. Wenden Sie das Verfahren an: Geben Sie die Morsecodes von R und K an und entschlüsseln Sie die Folge -.. / .. / . / ... (Buchstaben durch „/“ getrennt). 3 BE
  3. Implementieren Sie die Methode static String decodiere(BinTree<String> morse, String code), die den Buchstaben zum Morsecode code liefert. Führt der Code aus dem Baum heraus, soll "?" geliefert werden. 5 BE
  4. Das vollständige Morsealphabet enthält 26 Buchstaben mit Codes aus höchstens vier Zeichen. Begründen Sie, dass dafür ein Binärbaum der Höhe 5 genügt, und geben Sie an, wie viele Knoten er höchstens haben kann. 3 BE

Insgesamt 15 BE

Hinweise

Hinweis zu Aufgabe a)
Zählen Sie Knoten pro Ebene; die Wurzel liegt auf Ebene 1.
Hinweis zu Aufgabe b)
Suchen Sie den Buchstaben im Baum und notieren Sie den Weg von der Wurzel aus.
Hinweis zu Aufgabe c)
Laufen Sie Zeichen für Zeichen mit einer Hilfsvariablen b durch den Baum. Vor jedem getLeft()/getRight() und vor getItem() muss geprüft werden, ob der Baum leer ist.
Hinweis zu Aufgabe d)
Ein Code der Länge k endet auf Ebene k + 1. Wie viele Knoten passen höchstens auf die Ebenen 2 bis 5?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Die Wurzel enthält keinen Buchstaben (leerer Text). Sie hat die Kinder E und T. Innere Knoten sind die Wurzel sowie E, T, I, A, N, M; Blätter sind S, U, R, W, D, K, G, O. Der Baum ist vollständig: Jede Ebene ist voll besetzt. Er hat 15 Knoten, davon 8 Blätter, und die Höhe 4.

Erwartungshorizont zu Aufgabe b)

R: .-. (links, rechts, links). K: -.-. Die Folge ergibt D, I, E, S — das Wort DIES.

Erwartungshorizont zu Aufgabe c)
static String decodiere(BinTree<String> morse, String code) {
    BinTree<String> b = morse;
    for (int i = 0; i < code.length(); i++) {
        if (b.isEmpty()) {
            return "?";
        }
        if (code.charAt(i) == '.') {
            b = b.getLeft();
        } else {
            b = b.getRight();
        }
    }
    if (b.isEmpty()) {
        return "?";
    }
    return b.getItem();
}

Geprüft mit dem abgebildeten Baum: ".-." → R, "-.-" → K, "..--" → ?. Eine rekursive Lösung ist gleichwertig.

Erwartungshorizont zu Aufgabe d)

Ein Code aus k Zeichen führt von der Wurzel k Kanten nach unten, also auf Ebene k + 1. Codes mit höchstens vier Zeichen enden spätestens auf Ebene 5 — Höhe 5 genügt. Auf den Ebenen 2 bis 5 ist Platz für 2 + 4 + 8 + 16 = 30 ≥ 26 Buchstaben. Mit der Wurzel hat der Baum höchstens \(2^5-1=31\) Knoten.

2

Die Ahnentafel

AFB II–III

Eine Ahnenforschungs-App speichert die Vorfahren einer Person als BinTree<String>: Die Wurzel ist die Person selbst, der linke Teilbaum steht für die Mutter mit ihren Vorfahren, der rechte für den Vater. Unbekannte Personen werden durch leere Bäume dargestellt. Die Generation der Wurzel hat die Nummer 0, die der Eltern die Nummer 1 usw.

Gegeben ist außerdem die Methode:

static int geheimnis(BinTree<String> b) {
    if (b.isEmpty() || b.isLeaf()) {
        return 0;
    }
    int z = 0;
    if (b.getLeft().isEmpty() || b.getRight().isEmpty()) {
        z = 1;
    }
    return z + geheimnis(b.getLeft()) + geheimnis(b.getRight());
}
Material: Ahnentafel von Mia (links = Mutter, rechts = Vater)
ClaraFritzAnnaDavidMiaEvaBen
Ein leerer Teilbaum bedeutet: Die Person ist nicht bekannt.
  1. Erläutern Sie, warum sich eine Ahnentafel als Binärbaum modellieren lässt, ein Stammbaum mit allen Nachkommen einer Person dagegen nicht. 3 BE
  2. Implementieren Sie die Methode static int anzahlInGeneration(BinTree<String> b, int g), die die Anzahl der bekannten Vorfahren in Generation g liefert. Für Mias Ahnentafel liefert anzahlInGeneration(mia, 2) den Wert 3. 5 BE
  3. Analysieren Sie die Methode geheimnis: Ermitteln Sie ihren Rückgabewert für Mias Ahnentafel und geben Sie an, was sie im Sachzusammenhang berechnet. 4 BE
  4. Eine Entwicklerin schlägt vor, die Ahnentafel stattdessen in einer dynamischen Reihung zu speichern: Die Person steht an Index 0, Mutter und Vater der Person an Index i stehen an den Indizes 2i + 1 und 2i + 2, Unbekannte als leerer Text. Beurteilen Sie diesen Vorschlag im Vergleich zum Binärbaum. 4 BE

Insgesamt 16 BE

Hinweise

Hinweis zu Aufgabe a)
Wie viele Mütter und Väter hat jeder Mensch — und wie viele Kinder?
Hinweis zu Aufgabe b)
Rekursion über die Teilbäume: Beim Abstieg in einen Teilbaum wird die gesuchte Generation um 1 kleiner.
Hinweis zu Aufgabe c)
Spielen Sie die Methode für jeden Knoten durch. Welche Knoten haben genau einen leeren Teilbaum?
Hinweis zu Aufgabe d)
Kriterien: Zugriff auf eine bestimmte Generation, Speicherbedarf bei vielen Unbekannten, Einfügen neuer Vorfahren.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Jede Person hat genau zwei biologische Eltern — also höchstens zwei Kinder im Baum, und die Rollen „Mutter“ (links) und „Vater“ (rechts) sind fest. Bei den Nachkommen kann eine Person beliebig viele Kinder haben; dafür reichen zwei Teilbäume nicht, man bräuchte einen allgemeinen Baum.

Erwartungshorizont zu Aufgabe b)
static int anzahlInGeneration(BinTree<String> b, int g) {
    if (b.isEmpty()) {
        return 0;
    }
    if (g == 0) {
        return 1;
    }
    return anzahlInGeneration(b.getLeft(), g - 1) + anzahlInGeneration(b.getRight(), g - 1);
}

Für Mia: Generation 2 → Clara, David, Eva = 3; Generation 3 → Fritz = 1.

Erwartungshorizont zu Aufgabe c)

Leere Bäume und Blätter liefern 0. Für jeden inneren Knoten wird 1 gezählt, wenn genau ein Teilbaum leer ist (beide leer wäre ein Blatt). Mia, Anna: beide Eltern bekannt → 0. Ben: Vater unbekannt → 1. Clara: Mutter unbekannt → 1. Rückgabewert: 2. Die Methode zählt die Personen, von denen genau ein Elternteil bekannt ist.

Erwartungshorizont zu Aufgabe d)

Vorteile der Reihung: Generation g liegt geschlossen an den Indizes \(2^g-1\) bis \(2^{g+1}-2\); Mutter und Vater werden ohne Durchlaufen des Baums direkt über den Index erreicht. Nachteile: Für jede unbekannte Person muss ein leerer Platz reserviert werden — auch für alle ihre (ebenso unbekannten) Vorfahren. Bei 10 Generationen sind das \(2^{10}-1=1023\) Plätze, auch wenn nur 30 Personen bekannt sind. Der Binärbaum speichert nur bekannte Personen und lässt sich beliebig tief erweitern. Urteil: Für vollständig bekannte, wenige Generationen ist die Reihung geeignet; für typische, lückenhafte Ahnentafeln ist der Binärbaum speichersparender und flexibler.