Sto cercando di capire la cancellazione dei nodi in un albero binario. Questo è lo snippet di codice che ho trovato dal tutorial che spiega lo stesso.Come eliminare elementi in un albero binario in C?
Il nodo si presenta così:
struct node
{
int key_value;
struct node *left;
struct node *right;
};
Fonte: http://www.cprogramming.com/tutorial/c/lesson18.html
void destroy_tree(struct node *leaf)
{
if(leaf != 0)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
free(leaf);
}
}
Il mio dubbio è per quanto riguarda la parte free(leaf)
. Voglio dire, l'autore sostiene che questo cancellerà in modo ricorsivo tutti i nodi a partire da quello in basso a sinistra. Ma non è free(leaf)
solo liberando la memoria del puntatore foglia? Non tutti i nodi sono ancora connessi? Come si svolge la compensazione?
Come eliminare elementi in un albero binario? Uno e uno alla volta. –
L'albero è completamente distrutto, quindi non è necessario scollegare le ante. Potresti disconnetterli ma sarebbe inutile. Perché non lo provi? –
Ti suggerisco di scrivere una piccola immagine di questo su carta, e quindi provare a liberarlo utilizzando questo algoritmo per ottenere un blocco di esso. Suggerisco questo metodo per tutto ciò che riguarda gli alberi. –