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

如何在Binary Search Tree中查找checkV值并输出对应true或false结果

二叉搜索树值存在性检查代码问题分析与修正

原有代码存在的逻辑错误

  • 未处理空指针边界:当传入的root为nullptr(比如树为空、或者遍历到叶子节点的空子节点)时,直接访问root->data会触发空指针访问崩溃。
  • 条件判断非互斥:三个if分支是独立执行的,就算匹配了前两个分支进入递归,返回后仍会执行后续的相等判断逻辑,最终大概率会额外输出错误的false结果。
  • 无递归终止控制:递归查找到目标值后不会终止流程,会逐层返回父节点继续执行代码,导致多次输出错误结果。

正确实现方案

推荐将查询逻辑和输出逻辑分离,复用性更强,实现代码如下:

// 核心搜索逻辑,返回布尔值表示是否存在目标值
bool search(Node* root, int checkV) {
    // 遍历到空节点说明未找到目标值
    if (root == nullptr) {
        return false;
    }
    if (checkV == root->data) {
        return true;
    }
    // 大于当前节点值搜右子树,小于则搜左子树
    return checkV > root->data ? search(root->right, checkV) : search(root->left, checkV);
}

// 调用侧负责输出结果
int main() {
    // 此处省略BST构建逻辑,假设已构建完成,根节点为root
    int target = 6; // 要检查的目标值
    cout << (search(root, target) ? "true" : "false") << endl;
    return 0;
}

如果要求必须在search函数内直接完成输出,可参考以下实现:

void search(Node* root, int checkV) {
    if (root == nullptr) {
        cout << "false" << endl;
        return;
    }
    if (checkV == root->data) {
        cout << "true" << endl;
        return;
    }
    // 互斥分支递归,递归完成后直接返回不执行后续逻辑
    if (checkV > root->data) {
        search(root->right, checkV);
    } else {
        search(root->left, checkV);
    }
}

内容的提问来源于stack exchange,提问作者Asithandile Ludonga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:27:07