首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二叉树剔除子树,free出错

2012-10-20 
二叉树删除子树,free出错。代码如下:C/C++ codeint delNode (Node * cur) {if (!cur) return 0if (cur-le

二叉树删除子树,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; 
}

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

热点排行