读书人

二叉树剔除子树free出错

发布时间: 2012-10-20 14:12:47 作者: rapoo

二叉树删除子树,free出错。
代码如下:

C/C++ code
int delNode (Node * cur) {    if (!cur) return 0;    if (cur->left) delNode (cur->left);    if (cur->right) delNode (cur->right);    if (!cur->left && !cur->right) {        free (cur);        cur = NULL;    }    return 1;}

这一段代码的作用是通过递归,把cur以下的所有结点都删除掉,主要问题是,只要有free (cur)就是出现那个“遇到无效指令”的对话框。
我认为逻辑上就是如此了,不知道错在哪儿了。

[解决办法]
探讨

你原来的代码只能删掉叶子结点,根本就无法递归下去。
你自己画个二叉树,比划一下就知道了。
好好研究一下递归的思想

[解决办法]
探讨
引用:
代码如下:
C/C++ code
int delNode (Node * cur) {
if (!cur) return 0;
if (cur->left) delNode (cur->left);
if (cur->right) delNode (cur->right);
if (!cur->left && !cur->right) {
fre……

[解决办法]
同意7楼的,可以把程序改成如下格式,该程序已经过测试

void delNode (Node **cur)
{
if (*cur == NULL ) return 0;
delNode ( &( (*cur)->left));
delNode ( &( (*cur)->right));
free ( *cur );
*cur = NULL;
}

[解决办法]
探讨
你原来的代码只能删掉叶子结点,根本就无法递归下去。
你自己画个二叉树,比划一下就知道了。
好好研究一下递归的思想

读书人网 >C语言

热点推荐