c语言二叉树问题?高手进

来源:百度知道 编辑:UC知道 时间:2024/05/29 03:34:14
#include<stdio.h>
#include<stdlib.h>
typedef struct bitnode{
char data;
struct bitnode *lchild,*rchild;
}bitnode;
creatbitree(bitnode *t){
char ch;
scanf("%c",&ch);
if(ch=='#') t=NULL;
else{
if(!(t=(bitnode *)malloc(sizeof(bitnode)))) exit(0);
t->data=ch;
creatbitree(t->lchild);
creatbitree(t->rchild);
};
}
preorde(bitnode *t){

if(t){
printf("%c",t->data);
preorde(t->lchild);
preorde(t->rchild);
}
}
inorde(bitnode *t){

if(t){

inorde(t->lchild);
printf("%c",t->data);
inorde(t->rchild);
}
}

postorde(bitnode *t){

if(t){

postorde(t->lchild);
postorde(t->rchil

creatbitree中的t和主程序的bn没有关系,所以调用creatbitree后,bn并没有变化,还是个不确定的值,所以输出什么都有可能,就是不能输出所创建的二叉树。

修改:
creatbitree(bitnode *t)改为 bitnode *creatbitree(), 返回创建的二叉树根:
bitnode *creatbitree(){
bitnode *t;
char ch;
scanf("%c",&ch);
if(ch=='#') t=NULL;
else{
if(!(t=(bitnode *)malloc(sizeof(bitnode)))) exit(0);
t->data=ch;
t->lchild=creatbitree();
t->rchild=creatbitree();
};
return t;
}

主程序中调用creatbitree()的语句改为:
bn=creatbitree();