C语言二叉树问题,输入之后没有反应。

#include
#include
#include //head file

typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;//data and stucture
void InitBiTree(BiTree T){
T=NULL;//input
}

void Create(BiTree &T)
{
char ch[2];
scanf("%s",&ch[0]);
if(strcmp(ch,"@")==0) {
T=NULL;
}else{
T=(BiTree)malloc(sizeof(BiNode));
T->data=ch[0];
Create(T->lchild);
Create(T->rchild);
}
}

void visit(char c){
printf("%c",c);
}

void PreOrderTraverse(BiTree T){
if(T){
visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
visit(T->data);
InOrderTraverse(T->rchild);
}
}

void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
visit(T->data);
}
}

int depth(BiTree T){
int ldeep,rdeep;
if(!T) return 0;
else{
ldeep=depth(T->lchild);
rdeep=depth(T->rchild);
return ldeep>rdeep?ldeep:rdeep+1;
}
}

int main(){
BiTree T;
int deep;
InitBiTree(T);
printf("请输入序列\n");
Create(T);
deep=depth(T);
printf("\n深度:%d\n二叉树构建完毕",deep);
printf("\n先序遍历二叉树:");
PreOrderTraverse(T);
printf("\n中序遍历二叉树:");
InOrderTraverse(T);
printf("\n后序遍历二叉树:");
PostOrderTraverse(T);
return 0;
}
这个建立二叉树的输入语句哪里不对嘛?输入的内容是12@@3@@。
输入之后并没有什么反应,并非机子的问题。
除了输入的问题,是不是还有其他的问题在呢?比如说其他版块是不是出错了呢?
烦请指教。

你的输入不对。
scanf("%s",&ch[0]);应该改成scanf("%1s",&ch[0]);才行
图片说明

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>//head file

typedef struct BiNode{
    char data;
    struct BiNode *lchild, *rchild;
}BiTNode, *BiTree;//data and stucture
void InitBiTree(BiTree &T){
    T = NULL;//input
}

void Create(BiTree &T)
{
    char ch[2];
    scanf("%1s", &ch[0]);
    if (strcmp(ch, "@") == 0) {
        T = NULL;
    }
    else{
        T = (BiTree)malloc(sizeof(BiNode));
        T->data = ch[0];
        Create(T->lchild);
        Create(T->rchild);
    }
}

void visit(char c){
    printf("%c", c);
}

void PreOrderTraverse(BiTree T){
    if (T){
        visit(T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
}

void InOrderTraverse(BiTree T){
    if (T){
        InOrderTraverse(T->lchild);
        visit(T->data);
        InOrderTraverse(T->rchild);
    }
}

void PostOrderTraverse(BiTree T){
    if (T){
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        visit(T->data);
    }
}

int depth(BiTree T){
    int ldeep, rdeep;
    if (!T) return 0;
    else{
        ldeep = depth(T->lchild);
        rdeep = depth(T->rchild);
        return ldeep>rdeep ? ldeep : rdeep + 1;
    }
}

int main(){
    BiTree T;
    int deep;
    InitBiTree(T);
    printf("请输入序列\n");
    Create(T);
    deep = depth(T);
    printf("\n深度:%d\n二叉树构建完毕", deep);
    printf("\n先序遍历二叉树:");
    PreOrderTraverse(T);
    printf("\n中序遍历二叉树:");
    InOrderTraverse(T);
    printf("\n后序遍历二叉树:");
    PostOrderTraverse(T);
    return 0;
}