#创建二叉树,并先序遍历# 代码没有出错,但是输入:ab##cd##,没有显示结果出来

#创建二叉树,并先序遍历# 代码没有出错,但是输入:ab##cd##,没有显示结果出来 (*꒦ິ⌓꒦ີ)求大佬帮忙看一下
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node {
char data; //存放数据域
struct node *lchild,*rchild;//创建两个结构体指针变量 ,也就是定义了两个指向该结构体的指针 。遍历左子树指针,遍历右子树指针
}bnode;
typedef struct node blink;//创建新的标签,用blink来代替struct node
void xian(blink bt)
{
if(bt)
{
printf("%c",bt->data);
xian(bt->lchild);
xian(bt->rchild);
}
}
blink create(blink bt)
{
char ch;
scanf("%c",&ch);
getchar();
if(ch=='#')
bt=NULL;
else
{
bt=(blink)malloc(sizeof(bnode));
if(!bt)
exit(-1);
bt->data=ch;
bt->lchild=create(bt->lchild);
bt->rchild=create(bt->rchild);
}
return bt;
}
int main()
{
blink bt=NULL;
create(bt);
xian(bt);
return 0;
}

你题目的解答代码如下:

#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct node
{
    char data;                    //存放数据域
    struct node *lchild, *rchild; //创建两个结构体指针变量 ,也就是定义了两个指向该结构体的指针 。遍历左子树指针,遍历右子树指针
} bnode;
typedef struct node blink; //创建新的标签,用blink来代替struct node
void xian(blink *bt)
{
    if (bt)
    {
        printf("%c", bt->data);
        xian(bt->lchild);
        xian(bt->rchild);
    }
}
blink* create()
{
    blink *bt;
    char ch;
    scanf("%c", &ch);
    getchar();
    if (ch == '#')
        bt = NULL;
    else
    {
        bt = (blink *)malloc(sizeof(bnode));
        if (!bt)
            exit(-1);
        bt->data = ch;
        bt->lchild = create();
        bt->rchild = create();
    }
    return bt;
}
int main()
{
    blink *bt = NULL;
    bt = create();
    xian(bt);
    return 0;
}

如有帮助,望采纳!谢谢!