You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉搜索树(BST)删除操作后出现段错误问题求助

BST删除操作段错误的原因及修复

问题1:minVal函数缺少返回值

你的minVal函数在递归分支没有返回递归调用的结果,这会导致函数返回未定义的垃圾值,后续访问tempNode->value时会触发非法内存访问。

修复代码:

treeNode *minVal(treeNode *root)
{
    if(root == NULL || root->left==NULL)
        return root;
    else
        return minVal(root->left); // 必须返回递归结果
}

问题2:递归删除子节点时未更新父节点指针

在deleteBST函数中,当目标值在左/右子树时,你调用了递归删除,但没有把递归返回的新子树根节点赋值给root->left或root->right。这会导致修改后的子树没有被正确挂载回原树,原指针可能指向已释放的内存,引发段错误。

修复代码:

treeNode *deleteBST(treeNode *root,int value)
{
    treeNode *tempNode;
    
    // 新增空指针判断,避免访问空节点的value
    if(root == NULL)
        return NULL;

    if(value>root->value)
        root->right = deleteBST(root->right,value); // 赋值更新右子树
    else if(value<root->value)
        root->left = deleteBST(root->left,value); // 赋值更新左子树
    else
    {
        if(root->left==NULL)
        {
            tempNode = root->right;
            free(root);
            return tempNode;
        }
        else if(root->right==NULL)
        {
            tempNode = root->left;
            free(root);
            return tempNode;
        }
        else
        {
            tempNode = minVal(root->right);
            root->value=tempNode->value;
            root->right = deleteBST(root->right,tempNode->value);
        }
    }
    return root;    
}

内容的提问来源于stack exchange,提问作者Nikhil Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:50:27