二叉树前序遍历时程序崩溃

一飞飞飞 2012-06-07 10:08:21
#include <stdio.h>
#include <stdlib.h>
typedef struct bitnode{
int data;
struct bitnode *lchild,*rchild;
}bitnode;

void createbitree(bitnode *t){ //前序遍历创建二叉树
char ch;
ch = getchar();
if(ch == '.')
t = NULL;
else{
t = (bitnode *)malloc(sizeof(bitnode));
t->data = ch; //生成根结点;
createbitree(t->lchild); //构造左子树;
createbitree(t->rchild); //构造右子树;
}
}

void preorder(bitnode *t){ //前序遍历显示二叉树
if (t == NULL)
return;
printf("%c",t->data);
preorder(t->lchild);
preorder(t->rchild);
}

int main(int argc, char *argv[])
{
bitnode *t;
createbitree(t);
printf("二叉树已建立\n"); //这一步能正常显示。
preorder(t); //。。。。。出问题的代码。。。。。。。
system("PAUSE");
return 0;
}


编译能通过,也能成功创建二叉树,程序在显示完“二叉树已建立”几秒后程序崩溃,提示“程序已停止工作”。
不知道哪里写错了,请各位指正,谢谢。
...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
W170532934 2012-06-07
  • 打赏
  • 举报
回复
貌似楼上都说了
誓雪 2012-06-07
  • 打赏
  • 举报
回复
顶楼上。。。楼主的这样的做法只是简单的值传递!要用二维指针,进行地址传递!
Athenacle_ 2012-06-07
  • 打赏
  • 举报
回复

void createbitree(bitnode **t){ //前序遍历创建二叉树
char ch;
ch = getchar();
if(ch == '.')
*t = NULL;
else{
*t = (bitnode *)malloc(sizeof(bitnode));
(*t)->data = ch; //生成根结点;
createbitree(&(*t)->lchild); //构造左子树;
createbitree(&(*t)->rchild); //构造右子树;
}
}

相当于传值与传址的区别
acdbxzyw 2012-06-07
  • 打赏
  • 举报
回复
createbitree(&t);

要注意传二级指针,然后创建的函数内解一次引用再创建,否则建起来的只是以t的拷贝为根的树。而不是以t为根。
e3internet 2012-06-07
  • 打赏
  • 举报
回复
楼主用的啥编译器,printf("二叉树已建立\n");能正常显示?
函数形参不能改变外部实参,除非用双重指针,或者其他方法。

69,717

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧