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

二叉搜索树节点删除功能异常求助及返回值疑问

二叉搜索树删除功能修复及返回节点指针的原因

代码问题诊断与修复

你的删除功能失效主要源于两个核心错误:

1. 递归调用未更新父节点指针

在查找待删除节点的过程中,递归调用deletenode后没有将返回值赋值给父节点的左/右指针,导致子树的结构修改无法向上传递,树的链接关系没有更新。比如原代码中:

else if (val > root->key) {
    deletenode(root->right, val); // 错误:未将修改后的子树赋值回root->right
}

正确写法需要将递归结果赋值给对应指针:

else if (val > root->key) {
    root->right = deletenode(root->right, val);
}
else if (val < root->key) {
    root->left = deletenode(root->left, val);
}

2. 双子女节点删除逻辑不完整

当待删除节点有左右两个子节点时,你仅删除了右子树的最小值节点,但未将当前节点的key替换为该最小值,导致原节点仍保留在树中。正确逻辑是:

  • 用右子树最小值替换当前节点的key
  • 删除右子树中的最小值节点,并将修改后的右子树赋值回当前节点的right指针

修复后的完整deletenode函数

node* deletenode(node* root, int val) {
    if (root == NULL) {
        return root;
    }
    else if (val > root->key) {
        root->right = deletenode(root->right, val);
    }
    else if (val < root->key) {
        root->left = deletenode(root->left, val);
    }
    else {
        // 叶子节点
        if (root->right == NULL && root->left == NULL) {
            delete(root);
            return NULL;
        }
        // 只有左子节点
        else if (root->right == NULL) {
            node* temp = root->left;
            delete(root);
            return temp;
        }
        // 只有右子节点
        else if (root->left == NULL) {
            node* temp = root->right;
            delete(root);
            return temp;
        }
        // 有两个子节点
        else {  
            int min_val = minimumm(root->right);
            root->key = min_val; // 替换当前节点的key
            root->right = deletenode(root->right, min_val); // 更新右子树
            return root;
        }
    }
    return root; // 确保所有分支都有返回值
}

另外,删除不存在的节点71的逻辑本身是合理的,修复后会直接返回原树结构,不会产生错误。

为什么删除操作需要返回节点指针?

二叉搜索树的删除会改变树的结构,返回节点指针是为了保证每一层递归都能正确更新父节点的指向:

  • 删除叶子节点:需要告知父节点该位置变为NULL,父节点的左/右指针要被设为NULL;
  • 删除单子女节点:需要让父节点跳过被删除的节点,直接指向其唯一的子节点;
  • 递归层级传递:递归删除子树中的节点时,子树的根节点可能被替换(比如删除了子树的根),必须把修改后的子树根节点返回给上层,让上层节点的指针指向新的子树根,否则树的链接会断裂。

如果删除操作不返回指针,上层节点无法感知子树的变化,树的结构会保持原样,删除操作自然失效。

内容的提问来源于stack exchange,提问作者Henok Getachew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:45:46