Links. Ich. Rechts.
Deine Mission
Implementiere tree_inorder, gib alle Werte in einer Zeile aus, erhöhe jeden Wert um 1 und gib erneut aus.
Dein einziger Startzug: Stehe auf Knoten 8. Welcher Code-Schritt kommt zuerst?
Folge dem Code, nicht dem Namen
Klicke immer den nächsten ausgeführten Knoten. Der Avatar startet an der Wurzel, läuft aber erst so weit links wie möglich.
td(2) ausgeführt. Dein erster Klick ist also 2.Baue die Rekursion
n ist die Box, auf der du gerade stehst. n->left heißt: „folge dem Zeiger zur linken Box“. Wähle die drei Zeilen in Ausführungsreihenfolge.
if (n == nullptr) return; verhindert, dass du in einer leeren Kindposition weiterläufst. Danach: left, td(el), right.Wechsle nur die Aktion
Die Traversierung bleibt identisch. Was macht der übergebene Funktionszeiger td jeweils mit T& el?
T& ist entscheidend: Referenz = echte Zahl im Knoten verändern, nicht bloß eine Kopie.
Prüfungsabschluss
Trage die beiden Ausgabezeilen für unseren Baum ein: zuerst normal, dann nach add1t.
Wird nach deinem Abschlussversuch freigeschaltet.
Quellennaher Musterweg
void tree_inorder(tree_node* n, tree_do td) {
if (n == nullptr) return;
tree_inorder(n->left, td);
td(n->el);
tree_inorder(n->right, td);
}
void tree_inorder(tree* t, tree_do td) {
if (t->root == nullptr) return;
tree_inorder(t->root, td);
}
void showt(T& el) { cout << el << " "; }
void add1t(T& el) { el += 1; }
tree_inorder(&t, showt);
cout << endl;
tree_inorder(&t, add1t);
tree_inorder(&t, showt);
cout << endl;
Ausgabe: 2 4 6 8 10 12 14, danach 3 5 7 9 11 13 15.