简单的二叉树解决方案

简单的二叉树
貌似指针用多了,我就晕了,输出不对...
C/C++ code
#include <stdio.h>
#include <malloc.h>
typedef struct btnode
{
    int element;
    struct btnode *lchild,*rchild;
}*Btree;
void creat(Btree *BT);
void pre(Btree BT);
int main()
{
    Btree BT;
    creat(&BT);
    pre(BT);
    getch();
    return 0;
}

void creat(Btree *BT)
{    
    int number;
    printf("Please enter numbers:");
    scanf("%d",&number);
    if(number==0)
        BT=NULL;
    else
    {BT=(Btree *)malloc(sizeof(Btree));
    (*BT)->element=number;
    creat(&(*BT)->lchild);
    creat(&(*BT)->rchild);}
}

void pre(Btree BT)
{
    if(BT==NULL)
    {return;}
    printf("%d\t",BT->element);
    pre(BT->lchild);
    pre(BT->rchild);
}


------解决方案--------------------
已经修改好了,要静下来想一想指针的问题了。
C/C++ code

typedef struct btnode
{
    int element;
    struct btnode *lchild,*rchild;
}*Btree;
void creat(Btree *BT);
void pre(Btree BT);
int main()
{
    Btree BT;
    creat(&BT);
    pre(BT);
    getchar();
    return 0;
}

void creat(Btree *BT)
{    
    int number;
    printf("Please enter numbers:");
    scanf("%d",&number);
    if(number==0)
        (*BT)=NULL;
    else
    {
        (*BT)=(Btree )malloc(sizeof(btnode));
    (*BT)->element=number;
    creat(&((*BT)->lchild));
    creat(&((*BT)->rchild));}
}

void pre(Btree BT)
{
    if(BT==NULL)
    {return;}
    printf("%d\t",BT->element);
    pre(BT->lchild);
    pre(BT->rchild);
}