创建二叉树是如何输入?

创建二叉树是怎么输入???????????
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN_T sizeof(BTNode)
#define LEN_Q sizeof(QNode)
#define LEN_S 100
typedef char ElemType;
typedef struct BTNode
{
  ElemType data;
  struct BTNode *lchild,*rchild;
}BTNode,*BTree;

typedef struct QNode
{
  BTree data;
  struct QNode *next;
}QNode,*Queue;

typedef struct StackElemType
{
  BTree data;
  int f;//f=0:遍历左子树 f=1:遍历右子树
}StackElemType;

void CreateTree(BTree *T)
{
  char c;
  c=getchar();
  if (c=='#')
  (*T)=NULL;
  else
  {
  (*T)=(BTree)malloc(LEN_T);
   
  CreateTree(&(*T)->lchild);
  (*T)->data=c;
  CreateTree(&(*T)->rchild);
  }
}

void Xian(BTree T)
{
  if(T)
  {
  printf("%2c",T->data);
  Xian(T->lchild);
  Xian(T->rchild);
  }
}

void D_Xian(BTree T)
{
  BTree p=T,Stack[LEN_S];
  int top=0;
  do{
  while(p)
  {
  printf("%2c",p->data);
  Stack[top++]=p;
  p=p->lchild;
  }
  if(top>0)
  {
  p=Stack[--top];
  p=p->rchild;
  }
  }while(top>0||p!=NULL);
}

void Zhong(BTree T)
{
  if(T)
  {
  Zhong(T->lchild);
  printf("%2c",T->data);
  Zhong(T->rchild);
  }
}

void D_Zhong(BTree T)
{
  BTree p=T,Stack[LEN_S];
  int top=0;
  do{
  while(p)
  {
  Stack[top++]=p;
  p=p->lchild;
  }
  if(top>0)
  {
  p=Stack[--top];
  printf("%2c",p->data);
  p=p->rchild;
  }
  }while(top>0 || p);
}

void Hou(BTree T)
{
  if(T)
  {
  Hou(T->lchild);
  Hou(T->rchild);
  printf("%2c",T->data);
  }
}

void D_Hou(BTree T)
{
  StackElemType Stack[LEN_S];
  BTree p=T;
  int top=0;
  do{
  while(p)
  {
  Stack[top].f=0;
  Stack[top].data=p;
  p=p->lchild;
  top++;
  }

  if(top>0)
  {
  while(Stack[top-1].f==1)
  {
  p=Stack[--top].data;
  printf("%2c",p->data);
  }
  if(top>0)
  {
  Stack[top-1].f=1;
  p=Stack[top-1].data;
  p=p->rchild;
  }
  }
  }while(top>0);
}


//队列开始
void InitQueue(Queue *front,Queue *rear)
{
  (*front)=(*rear)=(Queue)malloc(LEN_Q);
}

void EnQueue(Queue *rear,BTree p)
{
  Queue q;
  q=(Queue)malloc(LEN_Q);
  q->data=p;
  q->next=NULL;
  (*rear)->next=q;
  (*rear)=q;
}