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

二叉树区间搜索求助:右侧节点检查实现遇到问题

解决BST区间搜索问题的思路与修正代码

我来帮你搞定这个二叉搜索树(BST)的区间搜索问题~ 先看看你当前代码里的几个核心问题:

  • 逻辑判断有漏洞:你只处理了节点值在区间内时跳左子树,但完全忽略了右子树里也可能存在符合区间的节点;else分支直接跳右子树,没有区分节点值小于左边界或大于右边界的情况,导致很多符合条件的节点会被漏掉。
  • found变量从未更新:从始至终都是false,最后返回的结果永远是错的。
  • 固定大小的数组arr既容易溢出,也没用来辅助判断是否找到元素,属于冗余代码。

BST区间搜索的核心逻辑

BST的核心特性是左子树所有节点值 < 当前节点值 < 右子树所有节点值,利用这个特性我们可以高效剪枝:

  • 如果当前节点值在[from, till]范围内:这个节点符合条件,同时需要继续遍历左、右子树,寻找其他符合条件的节点。
  • 如果当前节点值 < from:左子树的节点都更小,不可能符合区间要求,直接去右子树找更大的值。
  • 如果当前节点值 > till:右子树的节点都更大,不可能符合区间要求,直接去左子树找更小的值。

修正后的递归实现(逻辑更直观)

先给你一个递归版本的代码,理解起来更简单:

private boolean search(BSTNode r, int from, int till) {
    if (r == null) {
        return false; // 空树/子树,没有找到符合条件的节点
    }
    
    int rval = r.getData();
    boolean currentMatch = rval >= from && rval <= till;
    
    // 如果当前节点符合,直接标记找到;同时继续遍历左右子树确认是否有其他节点
    if (currentMatch) {
        return true || search(r.getLeft(), from, till) || search(r.getRight(), from, till);
    } 
    // 当前节点小于左边界,去右子树找更大的值
    else if (rval < from) {
        return search(r.getRight(), from, till);
    } 
    // 当前节点大于右边界,去左子树找更小的值
    else {
        return search(r.getLeft(), from, till);
    }
}

如果你偏好迭代实现(避免递归深度问题)

如果不想用递归,也可以用栈来实现迭代遍历:

private boolean search(BSTNode r, int from, int till) {
    if (r == null) {
        return false;
    }
    
    Stack<BSTNode> stack = new Stack<>();
    stack.push(r);
    
    while (!stack.isEmpty()) {
        BSTNode node = stack.pop();
        int val = node.getData();
        
        if (val >= from && val <= till) {
            return true; // 找到任意一个符合条件的节点就返回true
        }
        
        // 根据BST特性决定入栈哪些子节点
        if (val < from && node.getRight() != null) {
            stack.push(node.getRight());
        } else if (val > till && node.getLeft() != null) {
            stack.push(node.getLeft());
        }
    }
    
    return false;
}

额外补充

如果你需要收集所有符合区间的节点(而不是只判断是否存在),可以把代码里的return true改成将节点值加入列表,继续遍历直到栈空或递归结束即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:07:46