二叉搜索树 - 使用 Linux 在虚拟机中制作删除功能
Binary Search Tree - make remove function in virtual machine with Linux
这是我自己的BST(二叉搜索树函数(
当我编译时,它发生分段错误(核心转储(
哪一部分是错的?
我认为没有逻辑错误
请查看我的代码并给我建议
void Tree::remove(int data){
TreeNode *cursor=this->rootnode;
while(1){
if(cursor == NULL){
cout<<endl;
cout<<data<<" remove failed"<<endl;
return;
}
TreeNode *tNode;
int value=cursor->getData();
if(value==data){
if(cursor->getRight() != NULL && cursor->getLeft() != NULL){
tNode = findMaxNode(cursor->getLeft());
int num=tNode->getData();
cursor->setData(num);
cursor=cursor->getLeft();
remove(num);
}
else
{
tNode = (cursor->getLeft() == NULL) ? cursor->getRight() : cursor->getLeft();
free(cursor);
cout<<data<<" remove success!"<<endl;
return;
}
}
else if(data>value){
cursor=cursor->getRight();
remove(data);
}
else if(data<value){
cursor=cursor->getLeft();
remove(data);
}
}
}
你应该使用(更多(递归来解决你的问题。我希望这段代码对您有所帮助。
void Tree::remove(int data)
{
if(this->rootnode == NULL)
{
cout<<data<<" remove failed"<<endl;
return;
}
remove(this->rootnode, data);
}
void Tree::remove(TreeNode* &cursor, int data)
{
if (cursor != NULL)
{
if (data == cursor->getData())
{
remove(cursor->getLeft(), data);
remove(cursor->getRight(), data);
delete cursor;
cursor = NULL;
}
}
}
相关文章:
- 在Qt5中使用QTextSteam时的"使用已删除功能"
- 链表删除功能的单指针 // 是可能的
- 删除功能不适用于串行通信后多个循环中的多个实例
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 使用删除功能?
- 二叉搜索树 - 使用 Linux 在虚拟机中制作删除功能
- 为什么我的删除功能总是出现分段错误
- 与 c++ 中的删除功能混淆
- 用户使用C++中的删除功能删除文件
- 所以我想出了他的代码,但我不确定如何继续删除功能?
- 为什么我的删除功能中存在错误
- std::ifstream,使用已删除功能
- 学习C :错误:使用已删除功能
- 升级基于文本游戏的库存中的删除功能
- 错误:使用已删除功能
- 删除功能和ADL
- 队列的删除功能
- 删除功能误差的C 与有条件的iniaization一起使用
- 在PowerPC编译器上删除功能,而不是GCC上的功能
- 为什么是我的AVL树删除功能不平衡