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

二叉搜索树递归查找非键值(人员所属国家)的实现问题

问题原因

你的countryExists方法出现错误的核心原因是递归逻辑存在提前截断的问题,同时缺失边界情况的返回值:

  • 当前节点国家不匹配时,只要右子节点不为空,你就直接返回了右子树的查询结果,无论右子树是否找到目标国家,左子树的查询逻辑都不会执行,导致左子树的所有节点被漏查。
  • 如果当前节点国家不匹配,且左右子节点均为空,方法没有明确返回false,存在逻辑漏洞。
修复方案

正确的逻辑为:当前节点匹配直接返回true,否则只要任意一棵子树查询到匹配结果就返回true,所有分支都未查询到匹配时返回false,修复后的代码如下:

public boolean countryExists(String country){
    // 校验当前节点是否匹配
    if (this.person.getCountry().equals(country)) {
        return true;
    }
    // 校验右子树是否存在匹配
    if (right != null && right.countryExists(country)) {
        return true;
    }
    // 校验左子树是否存在匹配
    if (left != null && left.countryExists(country)) {
        return true;
    }
    // 所有节点均不匹配
    return false;
}

你对遍历顺序的理解是正确的,是否存在的判断结果和遍历顺序无关,只要覆盖所有节点即可,你也可以调整左右子树的查询顺序,最终返回结果不会发生变化。

可选优化:如果入参country可能为null,可以将equals判断替换为Objects.equals(this.person.getCountry(), country),避免空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:48:01