系统:windows10;编译器:dev c++
写了一个建立二叉树和前序遍历的程序
#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct bitnode{
datatype data;
struct bitnode *lchlid,*rchlid;
}BitNode;
CreateBitree(BitNode *T){ //建立二叉树
datatype x;
printf("输入数据:");
x=getchar();
getchar();
if(x=='#'){
T=NULL;
}
else{
T=(BitNode *)malloc(sizeof(BitNode));
T->data=x;
CreateBitree(T->lchlid);
CreateBitree(T->rchlid);
}
}
PreorderBitree(BitNode *T){ //前序遍历
if(T){
printf("%c",T->data);
PreorderBitree(T->lchlid);
PreorderBitree(T->rchlid);
}
}
int main(){
BitNode *T=NULL;
CreateBitree(T);
PreorderBitree(T);
return 0;
}
然后输出结果是这样的:
正确结果应该是:ab
然后看了别人的程序之后我改了一下,让建立二叉树的函数有返回值
#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct bitnode{
datatype data;
struct bitnode *lchlid,*rchlid;
}BitNode;
BitNode* CreateBitree(BitNode *T){ //建立二叉树
datatype x;
printf("输入数据");
x=getchar();
getchar();
if(x=='#'){
T=NULL;
return T;
}
else{
T=(BitNode *)malloc(sizeof(BitNode));
T->data=x;
T->lchlid=CreateBitree(T->lchlid);
T->rchlid=CreateBitree(T->rchlid);
return T;
}
}
PreorderBitree(BitNode *T){ //前序遍历
if(T){
printf("%c",T->data);
PreorderBitree(T->lchlid);
PreorderBitree(T->rchlid);
}
}
int main(){
BitNode *T=NULL;
T=CreateBitree(T);
PreorderBitree(T);
return 0;
}
就能输出了。
想了半天想不明白,求大佬指点