请问这个二叉树的创建和遍历什么地方出了问题?麻烦只要说出问题就行了,不要发新程序。

#include
#include
#define NULL 0
struct btree
{
char data;
btree *lchild;
btree *rchild;
};

void displaybtree(btree *t);
btree *createbtree(btree *t);

void main()
{
btree *t1,*t2;t1=(btree *)malloc(sizeof(btree));t2=(btree *)malloc(sizeof(btree));
printf("请输入二叉树:");
t2=createbtree(t1);
printf("输出为:");
displaybtree(t2);
}

btree *createbtree(btree *t)
{
t=(btree *)malloc(sizeof(btree));
char ch;
ch=getchar();
if(ch=='#')
t=NULL;
else
{
t->data=ch;
createbtree(t->lchild);
createbtree(t->rchild);
}
return t;
}

void displaybtree(btree *t)
{
if(t!=NULL)
{ printf("%c",t->data);
displaybtree(t->lchild);
displaybtree(t->rchild);
}
}

对于树节点T,此程序会重复动态分配内存。