C语言现存的一些关于先序建立二叉树的方法常有些纰漏,归根结底是因为,在子函数中用malloc函数申请的空间如果不能成功返回到主函数中,则建立失败,指针异常。
一般解决方法有:
1.使用指向指针的指针建立二叉树,此方法不便于在建立中递归调用,如果尝试可行会继续更新
2.子函数返回一个指向新申请的空间的指针变量
因此对于先序序列建立二叉树算法如下:
<span style="font-size:14px;">
#include<stdio.h>
typedef struct bnode{
int data;
struct bnode *lc, *rc;
}bnode_type;
int prosearch(bnode_type *root){
if(root!=NULL){
printf("%c\t",root->data);
prosearch(root->lc);
prosearch(root->rc);
}
return 0;
}
bnode_type* creat(bnode_type* root){
char s;
scanf("%c",&s);
if(s==' '){
root=NULL;
}
else{
root=(bnode_type*)malloc(sizeof(bnode_type));
root->data=s;
root->lc=creat(root->lc);
root->rc=creat(root->rc);
}
return root;
}
int main(){
bnode_type *p=NULL;
p=creat(p);
prosearch(p);
return 0;
}</span>