C++实现二叉排序树 出现问题

问题遇到的现象和发生背景

#include
using namespace std;
#include
typedef int ElemType;

//建立二叉排序树
typedef struct BiTNode
{
ElemType data;
BiTNode *lchild,*rchild;
}BiTNode, *BiTree;

//二叉排序树 查找元素
bool SearchBST(BiTree &T,int key)
{
if(!T || key==T->data)
{
return T; //返回根结点地址
}
else if(keydata)
{
return SearchBST(T->lchild,key);
}
else
{
return SearchBST(T->rchild,key);
}
}

//二叉排序树 插入结点
void InsertBSTree(BiTree &T,int e) //地址传递
{
//若已经存在
if(T && T->data==e)
{
cerr<<"树中已经存在元素"<<e<<endl;
}
//若为空,插入根结点
else if(!T)
{
T=new BiTNode;
T->data=e;
cout<<"原树未查询到,已插入"<<e<<endl;
}
//L
else if(edata)
{
InsertBSTree(T->lchild,e);
}
//R
else
{
InsertBSTree(T->rchild,e);
}

}

//中序遍历
void InOrderTraverse(BiTree T)
{
stack<BiTNode*> s;
BiTNode* p=T;
while(p || !s.empty())
{
if(p)
{
s.push(p);
p=p->lchild;
}
else
{
BiTNode *q=s.top();
cout<data<<endl;
s.pop();
p=q->rchild;
}
}
}

int main()
{
BiTree T;
InsertBSTree(T,10);
bool ret=SearchBST(T,10);
cout<<"bool查询结果:"<<ret<<endl;

ret=SearchBST(T,20);
cout<<"bool查询结果:"<<ret<<endl;

InsertBSTree(T,10);

InsertBSTree(T,20);
InsertBSTree(T,15);
InsertBSTree(T,30);
InsertBSTree(T,40);

InOrderTraverse(T);

return 0;

}

运行结果及报错内容

中序遍历的时候出现异常 Segmentation fault

我的解答思路和尝试过的方法

我怀疑我插入结点元素的逻辑有问题,但尚不明确,求解答!

我想要达到的结果

可以向二叉排序树插入结点,并成功中序排列。