创建二叉链表递归算法,不太明白错误在哪里

#include
#include

/二叉链表存储结构/
typedef char DataType;
typedef struct BiNode
{ DataType data;
struct BiNode *lchild;
struct BiNode *rchild;
}BiNode, *BiTree;

/创建二叉链表——递归算法/
BiTree* createBiTree()
{ DataType ch;
BiTree T;
ch=getchar();
if(ch=='#')return NULL;
else
{ T=(BiTree *)malloc(sizeof(BiTree));
T->data=ch;
T->lchild=createBiTree();
T->rchild=createBiTree();
return T;
}
}

/前序遍历二叉树的递归算法/
void PreOrder(BiTree*T)
{ if(T)
{ printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}

/中序遍历二叉树的递归算法/
void InOrder(BiTree*T)
{ if(T)
{ InOder(T->lchild);
printf("%c",T->data);
InOder(T->rchild);
}
}

/后序遍历二叉树的递归算法/
void PostOrder(BiTree*T)
{ if(T)
{ PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}

/主函数:在主函数中调用各个函数实现运算/
void main()
{ BiTree*root;
root=NULL;
printf("\n\n\t请输入结点的前序序列创建二叉树:#表示空:");
root=createBiTree();/生成二叉树/
printf("\n\t前序遍历二叉树-递归:\n");
PreOrder(root);
printf("\n\t中序遍历二叉树-递归:\n");
InOrder(root);
printf("\n\t后序遍历二叉树-递归:\n");
PostOrder(root);
}

目前啥错误现象啊?
又有一元产品了