主题:帮忙看下这个出了什么问题
烈焰燃烧 [专家分:2400] 发布于 2007-03-05 04:45:00
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct bnote
{
char data;
struct bnote *lchild,*rchild;
}bitree;
/*生成二叉树:用递归构造二叉树*/
bitree *CreatTree()
{
bitree *t;
char ch;
scanf("%c",&ch);
if(ch==' ') t==NULL;
else
{
t = (bitree*)malloc(sizeof(bitree)); //生成根结点
t->data = ch;
t->lchild = CreatTree(); //生成左孩子
t->rchild = CreatTree(); //生成右孩子
}
return t; //返回结点
}
/*遍历二叉树:用后序递归遍历法*/
void ReadTree(bitree *bt)
{
if(bt) //如结点非空
{
//if(bt->lchild!=NULL)[color=FF0000]
/*为什么每次调试的时候这里都会出现段异常呀?实在不理解 */
ReadTree(bt->lchild); //访问左孩子 [/color]
//if(bt->rchild!=NULL)
ReadTree(bt->rchild); //访问右孩子
printf("%c\n",bt->data);
}
}
int main(void)
{
bitree *bt;
bt = CreatTree(); //生成二叉树
ReadTree(bt); //遍历二叉树
free(bt);
printf("over");
system("pause");
return 0;
}
最后更新于:2007-03-06 04:42:00
回复列表 (共9个回复)
沙发
bpttc [专家分:8790] 发布于 2007-03-05 19:55:00
递归后序遍历 不知道你的异常是什么情况?
另外你的free只是free掉了一个树节点而已,还有很多节点没有释放
板凳
bpttc [专家分:8790] 发布于 2007-03-05 19:59:00
if(ch==' ') t==NULL;
注意creat函数里的这句,像是多了一个=
为什么非要用create函数来建立一个树?
直接编个函数来创立一个现成的树不就好了
3 楼
euc [专家分:4310] 发布于 2007-03-05 20:19:00
答对问题记得加点分,给好心人一个回应.
4 楼
freeeerf [专家分:5440] 发布于 2007-03-05 22:44:00
看了半天,这里有个小问题:
if(ch==' ') t==NULL;
应该是
if(ch==' ') t=NULL;
多了一个等号.
5 楼
烈焰燃烧 [专家分:2400] 发布于 2007-03-05 23:41:00
粗心了点~~实在麻烦大家了~~t==NULL这个错了~~~谢谢大家啊
6 楼
烈焰燃烧 [专家分:2400] 发布于 2007-03-05 23:47:00
[quote]为什么非要用create函数来建立一个树?
直接编个函数来创立一个现成的树不就好了[/quote]还不知道怎么做~~
PS:我现在晚上才能去网吧上,家里的没网线啦~~~所以回复晚了点~~实在抱歉啊
7 楼
bpttc [专家分:8790] 发布于 2007-03-06 15:07:00
http://www.aurora.dti.ne.jp/~m-tamaki/Univ/Info02First/Algorithm/Tree/index.html
google到一个日语网页,虽然日语我不懂
但是网页上的图和代码都比较清楚
另外最后的main函数提供了一个树,楼主可用来练习
另外google到一个加拿大的网站有比较生动的三序遍历二叉树的图片
http://www.cs.usask.ca/resources/tutorials/csconcepts/1998_6/bintree/2-2.html
8 楼
烈焰燃烧 [专家分:2400] 发布于 2007-03-06 23:42:00
3Q
9 楼
海上飞洪 [专家分:520] 发布于 2007-03-07 00:19:00
用递归,比较好容易理解,也不会容易出错
t==NULL
真是不该有的错误啊
我来回复