把数字挨个输入后,二叉树没反应退出

typedef int Elemtype; 
typedef struct BitNode
{
    Elemtype data;
    struct BitNode *lchild,*rchild;
}BitNode,*BiTree; 
void Createtree(BiTree B)
{
    Elemtype d;
    scanf("%d",&d);
    if(d<=0)
        B=NULL;
    else
    {
            B=(BiTree)malloc(sizeof(BitNode));
            B->data=d;
            Createtree(B->lchild);
            Createtree(B->rchild);
    }
}
void Destroytree(BiTree B)
{
    if(B)
    {
        Destroytree(B->lchild);
        Destroytree(B->rchild);
        free(B);
     } 
 } 
int Treedepth(BiTree B)
{
    int ldep,rdep,max;
    if(!B)
        return 0;
    else{
        ldep=Treedepth(B->lchild);
        rdep=Treedepth(B->rchild);
        if(ldep>rdep)
            max=ldep;
        else
            max=rdep;
    }
    return max+1;
}
void PreorderTraverse(BiTree B)
{
    if(B){
        printf("%d",B->data);
        PreorderTraverse(B->lchild);
        PreorderTraverse(B->rchild);
    }
}
BiTree Searchnode(BiTree B,Elemtype e)
{
    if(B)
    {
        if(B->data!=e)
        {
            Searchnode(B->lchild,e);
            if(!Searchnode(B->lchild,e))
                Searchnode(B->rchild,e);
        }
        else 
            return B;
    }
    return NULL;
}
int main()
{
    int a;
    BiTree T,p,lp,rp;
    Createtree(T);//先序创建二叉树
    PreorderTraverse(T);
    p=Searchnode(T,1);
    if(p)
    {
        lp=p->lchild;
        rp=p->rchild;
        if(lp)
            printf("左孩子%d,",lp->data);
        else
            printf("无左孩子,");
        if(rp)
            printf("右孩子%d。\n",rp->data);
        else 
            printf("无右孩子。\n");
     } //输出“1”结点左、右节点的孩子值
    printf("树的高度为%d",Treedepth(T));//树的高度 
    Destroytree(T);//释放树 
}
void Createtree(BiTree *B)
{
    Elemtype d;
    scanf("%d",&d);
    if(d<=0)
        *B=NULL;
    else
    {
            *B=(BiTree)malloc(sizeof(BitNode));
            (*B)->data=d;
            Createtree(&(*B)->lchild);
            Createtree(&(*B)->rchild);
    }
}


这里要用指针,否则作用不到调用那里

Createtree(T); 先序创建二叉树函数不正确,修改如下,改动处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct BitNode
{
    Elemtype data;
    struct BitNode *lchild,*rchild;
}BitNode,*BiTree;
void Createtree(BiTree* B)  //void Createtree(BiTree B) 修改
{
    Elemtype d;
    scanf("%d",&d);
    if(d<=0)
        (*B)=NULL;  // B=NULL; 修改
    else
    {
        (*B)=(BiTree)malloc(sizeof(BitNode)); // B=(BiTree)malloc(sizeof(BitNode)); 修改
        (*B)->data=d; //B->data=d; 修改
        Createtree(&(*B)->lchild); //Createtree(B->lchild);  修改
        Createtree(&(*B)->rchild); // Createtree(B->rchild); 修改
    }
}
void Destroytree(BiTree B)
{
    if(B)
    {
        Destroytree(B->lchild);
        Destroytree(B->rchild);
        free(B);
     }
 }
int Treedepth(BiTree B)
{
    int ldep,rdep,max;
    if(!B)
        return 0;
    else{
        ldep=Treedepth(B->lchild);
        rdep=Treedepth(B->rchild);
        if(ldep>rdep)
            max=ldep;
        else
            max=rdep;
    }
    return max+1;
}
void PreorderTraverse(BiTree B)
{
    if(B){
        printf("%d",B->data);
        PreorderTraverse(B->lchild);
        PreorderTraverse(B->rchild);
    }
}
BiTree Searchnode(BiTree B,Elemtype e)
{
    if(B)
    {
        if(B->data!=e)
        {
            Searchnode(B->lchild,e);
            if(!Searchnode(B->lchild,e))
                Searchnode(B->rchild,e);
        }
        else 
            return B;
    }
    return NULL;
}
int main()
{
    int a;
    BiTree T,p,lp,rp;
    Createtree(&T); //Createtree(T);//先序创建二叉树 修改
    PreorderTraverse(T);
    p=Searchnode(T,1);
    if(p)
    {
        lp=p->lchild;
        rp=p->rchild;
        if(lp)
            printf("左孩子%d,",lp->data);
        else
            printf("无左孩子,");
        if(rp)
            printf("右孩子%d。\n",rp->data);
        else
            printf("无右孩子。\n");
     } //输出“1”结点左、右节点的孩子值
    printf("树的高度为%d",Treedepth(T));//树的高度
    Destroytree(T);//释放树

    return 0;
}