为什么printf函数不打印输出

在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);
    }
}