mardi 26 juillet 2016

recursive delete on a binary tree

I am trying to understand how the recursive method of deletion of a binary search tree works. The code that I came across in many places looks as follows:

void destroy_tree(struct node *leaf)
{
  if( leaf != 0 )
  {
      destroy_tree(leaf->left);
      destroy_tree(leaf->right);
      free( leaf );
  }
}

I can't understand however a) how does it work if there are no returns in the routine? b) when free() gets to be called? I think about, e.g., such a tree:

                           10
                         /    
                        6      14
                       /     /  
                      5   8  11  18

So my understanding is that I traverse 10->6->5, and then I call destroy_tree(5->left). Therefore, leaf inside if is NULL, and what is if-dependent is not executed, hence 5 is not being deleted. Where do I make mistake in this reasoning? How does winding and unwinding work here? Any help kindly appreciated :-)

Aucun commentaire:

Enregistrer un commentaire