Sto cercando di capire come funziona il metodo ricorsivo di eliminazione di un albero di ricerca binario. Il codice che mi sono imbattuto in molti luoghi si presenta come segue:eliminazione ricorsiva su un albero binario
void destroy_tree(struct node *leaf)
{
if(leaf != 0)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
free(leaf);
}
}
non riesco a capire però a) come funziona se non ci sono ritorni nella routine? b) quando viene chiamato free()? Penso, per esempio, un tale albero:
10
/ \
6 14
/\ /\
5 8 11 18
Quindi la mia comprensione è che posso attraversarla 10-> 6-> 5, e poi chiamo destroy_tree (5-> a sinistra). Pertanto, leaf inside se è NULL e cosa è if-dependent non viene eseguito, quindi 5 non viene eliminato. Dove sbaglio in questo ragionamento? Come funzionano gli avvolgimenti e lo svolgimento? Qualsiasi aiuto gentilmente apprezzato :-)
Grazie @ Marco, dritto al punto. Molto apprezzato. –