バイナリ検索ツリーの削除の再帰的な方法がどのように機能するかを理解しようとしています。私は多くの場所で出会ったコードは次のようになります。バイナリツリーの再帰的削除
void destroy_tree(struct node *leaf)
{
if(leaf != 0)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
free(leaf);
}
}
私は日常的にはリターンが存在しない場合a)はどのように動作しますが理解できないのですか? b)free()が呼び出されると、?
10
/ \
6 14
/\ /\
5 8 11 18
だから、私の理解は、私は> 5 10-> 6を通過した後、私は(左5>)destroy_treeを呼び出すことです:私は、例えば、このようなツリー、考えます。したがって、if内部のleafはNULLで、if-dependentは実行されないため、5は削除されません。この理由で私はどこで間違いを犯すのですか?ここで巻き取りと巻き戻しはどのように機能しますか?親切
をおかげでストレートポイントに、@マーク:以下
再帰的削除の完全な実装がどのように見えるべきかのコードです。とても有難い。 –