问题遇到的现象和发生背景
#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
我的解答思路和尝试过的方法
我怀疑我插入结点元素的逻辑有问题,但尚不明确,求解答!
我想要达到的结果
可以向二叉排序树插入结点,并成功中序排列。