Próbuję zrozumieć, jak działa rekurencyjna metoda usuwania drzewa wyszukiwania binarnego. Kod, który natknąłem się w wielu miejscach wygląda następująco:usuwanie rekursywne na drzewie binarnym
void destroy_tree(struct node *leaf)
{
if(leaf != 0)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
free(leaf);
}
}
nie mogę zrozumieć jednak), jak to działa, jeśli nie ma żadnych zwrotów w rutynę? b) kiedy zostanie wywołany free()? Myślę o, na przykład takiego drzewa:
10
/ \
6 14
/\ /\
5 8 11 18
Więc mój zrozumienia jest to, że przechodzą 10-> 6-> 5, a następnie zadzwonić destroy_tree (5-> lewo). Z tego powodu, jeśli jest to NULL, to należy je zapisać, a co nie jest zależne, jeśli nie jest wykonywane, stąd 5 nie jest usuwane. Gdzie popełniam błąd w tym rozumowaniu? Jak tu działa zwijanie i odwijanie? Każda pomoc uprzejmie ceniona :-)
Dzięki @mark, prosto do punktu. Bardzo doceniane. –