求助!一个二叉树程序创建和遍历的程序

#include
#include
typedef char ElementType;
typedef struct BiNode{
ElementType data;
struct BiNode * lchild;
struct BiNode * rchild;
}BiNode;
void CreatBiTree2(BiNode * T);
void PreTraverBiTree(BiNode const * T);
int main()
{
BiNode * T = NULL;
CreatBiTree2(T);
PreTraverBiTree(T);
return 0;
}
/*建立一个二叉树*/
void CreatBiTree2(BiNode *T)
{
ElementType ele;
scanf("%c",&ele);
if( ele != '#' )
{
T = (BiNode *)malloc(sizeof(BiNode));
if(!T)
exit(-1);//分配失败

    T->data = ele;
    CreatBiTree2(T->lchild);
    CreatBiTree2(T->rchild);
}
else
    T = NULL;
return;

}
/*前序遍历一个二叉树*/
void PreTraverBiTree(BiNode const * T)
{
if(T)
{
printf("%c ",T->data);
PreTraverBiTree(T->lchild);
PreTraverBiTree(T->rchild);
}
return;
}

所以问题是什么呢?
你可以去搜一搜已有的成功实现的二叉树程序,看自己写的有啥不同之处。
以后提问的时候把握一下结构:
问题-代码-错误报告-自己的思考-求助的具体方面

编译没问题,但输入a b # c # # #后没打印任何东西,,一直是输入状态,也没return。检查了遍历函数,应该没问题,问题出在主函数或建立二叉树函数里,但实在找不出来,有没有大神帮忙看看,感激不尽

if(!T)
exit(-1);//分配失败

T->data = ele;
CreatBiTree2(T->lchild);
CreatBiTree2(T->rchild);

}
else
T = NULL;
return;
这是什么。。。。难道看不出来么

又回来看了一下,感觉有种说不上来的古怪。
我一直都很害怕递归,因为一个不小心,递归自陷就跳不出来,最蛋疼的是递归还不好调试,一调就会经常出个内存问题。。。
题主的错误肯定是在CreateBiTree这个递归函数里的,里面的选择判断是如果输入为“#”,就执行空树操作,可是做完这个呢~已经自陷了啊(具体情境有点像蚁人里最后无限变小的情节)
你的右子树递归还没做,左子树的最后一个空节点已经不知道该怎么做了。return还是不return呢?这是个问题。

我以前自己写创建二叉树(使用递归)时,是先写个insertTree函数(有现成算法),再用while循环插入数据。比较安全。

题主最好去查查现成的二叉树生成算法,这个不要自己胡来,我说真的,递归很难搞,很难搞!就算有人真的理解,也不一定能给你讲通。
安全第一啊~