Ich versuche zu verstehen, wie die rekursive Methode der Löschung eines binären Suchbaums funktioniert. Der Code, den ich kam in vielen Orten sieht wie folgt aus:rekursives Löschen auf einem Binärbaum
void destroy_tree(struct node *leaf)
{
if(leaf != 0)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
free(leaf);
}
}
Ich kann jedoch nicht a) verstehen, wie es funktioniert, wenn es keine Rückkehr in der Routine ist? b) wann soll free() aufgerufen werden? Ich denke über, zum Beispiel, wie ein Baum:
10
/ \
6 14
/\ /\
5 8 11 18
Also mein Verständnis ist, dass ich 10-> 6-> 5, durchqueren und dann rufe ich destroy_tree (5-> links). Daher ist leaf inside if NULL, und was if-abhängig ist, wird nicht ausgeführt, daher wird 5 nicht gelöscht. Wo mache ich Fehler in dieser Argumentation? Wie funktioniert das Auf- und Abwickeln? Jede Hilfe freundlich geschätzt :-)
Dank @ Mark, direkt auf den Punkt. Sehr geschätzt. –