二叉搜索树 - 使用 Linux 在虚拟机中制作删除功能

Binary Search Tree - make remove function in virtual machine with Linux

本文关键字:删除 功能 虚拟机 搜索树 使用 Linux      更新时间:2023-10-16

这是我自己的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;
        }
    }
}