大辰学编程 2022-05-07 18:06
浏览 10
已结题

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

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

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

我想要达到的结果

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月15日
    • 创建了问题 5月7日

    悬赏问题

    • ¥15 使用MATLAB进行余弦相似度计算加速
    • ¥15 服务器安装php5.6版本
    • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
    • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
    • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
    • ¥15 arcgis处理土地利用道路 建筑 林地分类
    • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
    • ¥100 寻会做云闪付tn转h5支付链接的技术
    • ¥15 DockerSwarm跨节点无法访问问题
    • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误