求求ps大神帮忙p图解释一下这个程序——二叉树的建立

问题: 二叉树删除子树,free出错。
代码如下: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;
这一段代码的作用是通过递归,把cur以下的所有结点都删除掉,主要问题是,只要有free&(cur)就是出现那个“遇到无效指令”的对话框。
我认为逻辑上就是如此了,不知道错在哪儿了。解决方案1:引用&6&楼&&的回复:你原来的代码只能删掉叶子结点,根本就无法递归下去。
你自己画个二叉树,比划一下就知道了。
好好研究一下递归的思想
不对啊,lz的递归没错啊,删除了叶子节点,根节点不也就变成了叶子节点了吗?????
知识free里面的内容错了吧,应该是*cur还是cur要看lz是如何申请的空间了吧。自己手动试试,lz的效果和
void&delNode&(Node&**cur)&&&
&&if&(*cur&==&NULL&)&return&0;
&&delNode&(&&(&(*cur)-&left));
&&delNode&(&&(&(*cur)-&right));
&&free&(&*cur&);
&&*cur&=&NULL;&&&
是一个效果
解决方案2:
同意7楼的,可以把程序改成如下格式,该程序已经过测试
void&delNode&(Node&**cur)&
&&if&(*cur&==&NULL&)&return&0;
&&delNode&(&&(&(*cur)-&left));
&&delNode&(&&(&(*cur)-&right));
&&free&(&*cur&);
&&*cur&=&NULL;&
}解决方案3:引用&7&楼&&的回复:引用楼主&的回复:
代码如下:
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)&{
这个正解,++
解决方案4:引用&6&楼&&的回复:你原来的代码只能删掉叶子结点,根本就无法递归下去。
你自己画个二叉树,比划一下就知道了。
好好研究一下递归的思想
递归的话是可以的。只不过&
if&(!cur-&left&&&&!cur-&right)&{
&&&&&&&&free&(cur);
&&&&&&&&cur&=&NULL;
这个if语句里面的代码只有&当&cur&是叶子节点的时候&才可能执行。
也就是6楼的只能删除叶子节点
以上介绍了“ 二叉树删除子树,free出错。”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/2637743.html
上一篇: 下一篇:15:52 提问
求大神看看,C语言二叉树非递归遍历问题 ,最后输出正确,然后在程序崩溃
typedef struct TNode {
struct TNode *lchild,*
}TNode,*BiT
typedef struct {
int createBiTree(BiTree &S){
scanf("%c",&ch);
if(ch=='#')
S=(TNode *)malloc(sizeof(TNode));
createBiTree(S-&lchild);
createBiTree(S-&rchild);
int Initstack(Stack &R) {
R.base=(BiTree *)malloc(100*sizeof(TNode));
if(!R.base) exit(0);
R.stacksize=100;
void push(Stack &R,BiTree e)
if(!(R.top-R.base)) {
R.base=(BiTree )realloc(R.base,(R.stacksize+10)*sizeof(TNode *));
R.top=R.stacksize+R.
R.stacksize+=10;
*R.top++=e;
void pop(Stack &R,BiTree &e) {
if(R.top-R.base==0)
e=(--R.top);
void printBiTree(BiTree S) {
Initstack(R);
while(p || (R.top-R.base))
printf("%3c",p-&date);
push(R,p);
if(!(R.top-R.base))
printf("%3c",p-&date);
int other(BiTree S)
printf("%c",S-&date);
other(S-&lchild);
other(S-&rchild);
int main() {
createBiTree(S);
printBiTree(S);
先序遍历输出,#代表空
按赞数排序
有大神帮我看一下吗?
将free(S) 放在 renturn 0; 前面
因为 return 0;后程序退出, 不会调用free(S) 去释放内存
其他相关推荐查看: 680|回复: 0|关注: 0
matlab二叉树如何建立
<h1 style="color:# 麦片财富积分
新手, 积分 10, 距离下一级还需 40 积分
【背景】在做机器学习方面的东西,一种类似于决策树的。====================================
【求助】如何用matlab建立二叉树?最简单,最普通的就行,我需要看原理。求大神写写代码或者关键的方法,感激不尽。
站长推荐 /2
机器视觉和人工智能在医疗设备中的应用及实现
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
#include &stdio.h&
#include &stdlib.h&
typedef char ElementT
struct binaryTreeNode
struct binaryTreeNode *LeftChild,*RightC
typedef struct binaryTreeNode BinaryTreeN
void BTreeCreate(BinaryTreeNode **T)
scanf("%c",&x);
if(x == ' ')
(*T) = NULL;
(*T) = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
(*T)-&data =
/*三行printf用于检验,发现下面printf语句会发生重复,我百思不得其解,求指导*/
printf("%d\n",(*T));
printf("%d\n",(*T)-&LeftChild);
printf("%d\n",(*T)-&RightChild);
BTreeCreate(&((*T)-&LeftChild));
BTreeCreate(&((*T)-&RightChild));
void PreOrder(BinaryTreeNode *t)
printf("%c",t-&data);
PreOrder(t-&LeftChild);
PreOrder(t-&RightChild);
void InOrder(BinaryTreeNode *t)
InOrder(t-&LeftChild);
printf("%c",t-&data);
InOrder(t-&RightChild);
void PostOrder(BinaryTreeNode *t)
PostOrder(t-&LeftChild);
PostOrder(t-&RightChild);
printf("%c",t-&data);
int main(void)
BinaryTreeNode *t;
BTreeCreate(&t);
printf("\n先序:");PreOrder(t);
printf("\n后序:");InOrder(t);
printf("\n中序:");PostOrder(t);
printf("\n");
输入a,编译结果输入空格,编译结果
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
一开始就来讨论并不好...
该答案已被忽略,原因:答非所问,不符合答题要求
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
在 scanf("%c",&x); 后面加一句: getchar(); 就可以工作了.
原因是, 你每次敲的回车, 还在输入缓存里, 下一次递归, 会跳过输入过程, 直接将 x 获取为 '\n'. 所以会输出两遍...
另外, 提醒一下你.
printf("\n后序:");InOrder(t);
printf("\n中序:");PostOrder(t);
这里写反了. InOrder 是中序, PostOrder 是后序.
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:数据结构课后习题及解析第六章_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数据结构课后习题及解析第六章
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩15页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 求大神帮我ps搞笑图 的文章

 

随机推荐