在xianxu函数内的printf无法打印输出这是为什么?该如何解决?
#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
int date;
struct tree *left;
struct tree *right;
}tree;
int creat(tree *head);
void xianxu(tree *head);
int main()
{
tree *head;
creat(head);
xianxu(head);
}
int creat(tree *head)
{
char x;
scanf("%c",&x);
getchar();
if(x=='#')
{
head=NULL;
}
else
{
tree *ne=(tree*)malloc(sizeof(tree));
if(!head)
{
exit(-1);
}
ne->date=x;
creat(ne->left);
creat(ne->right);
}
}
void xianxu(tree *head)
{
if(head!=NULL)
{
printf("%c\n",head->date);
xianxu(head->left);
xianxu(head->right);
}
}
修改如下,改动处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
int date;
struct tree *left;
struct tree *right;
}tree;
void creat(tree **head);//修改 int creat(tree *head);
void xianxu(tree *head);
int main()
{
tree *head;
creat(&head);
xianxu(head);
return 0;
}
void creat(tree **head) //修改 int creat(tree *head)
{
char x;
scanf(" %c",&x); //修改
//getchar(); //修改
if(x=='#')
{
(*head) = NULL;
}
else
{
(*head)=(tree*)malloc(sizeof(tree)); //修改 tree *ne=(tree*)malloc(sizeof(tree));
if(!(*head)) //修改
{
exit(-1);
}
(*head)->date=x; //修改 ne->date=x;
creat(&(*head)->left); //修改 creat(ne->left);
creat(&(*head)->right);//修改 creat(ne->right);
}
}
void xianxu(tree *head)
{
if(head!=NULL)
{
printf("%c\n",head->date);
xianxu(head->left);
xianxu(head->right);
}
}
下面是修改后的代码,要将 creat 函数修改为返回值类型为 tree * 的函数,并且在主函数中将 creat 函数的返回值赋值给 head。
#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
int date;
struct tree *left;
struct tree *right;
} tree;
tree *creat(tree *head);
void xianxu(tree *head);
int main()
{
tree *head;
head = creat(head);
xianxu(head);
}
tree *creat(tree *head)
{
char x;
scanf("%c", &x);
getchar();
if(x == '#')
{
head = NULL;
}
else
{
tree *ne = (tree*)malloc(sizeof(tree));
if(!ne)
{
exit(-1);
}
ne->date = x;
ne->left = creat(ne->left);
ne->right = creat(ne->right);
head = ne;
}
return head;
}
void xianxu(tree *head)
{
if(head != NULL)
{
printf("%c\n", head->date);
putchar((char)head->date);
xianxu(head->left);
xianxu(head->right);
}
}