【发布时间】:2013-06-15 05:02:30
【问题描述】:
我试图了解删除二叉搜索树的递归方法是如何工作的。我在很多地方遇到的代码如下:
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
所以我的理解是遍历10->6->5,然后调用destroy_tree(5->left)。所以if里面的leaf是NULL,不执行if依赖的,所以5没有被删除。我在这个推理中哪里出错了?卷绕和展开是如何在这里工作的?任何帮助都非常感谢:-)
【问题讨论】:
标签: c++ c recursion binary-tree binary-search-tree