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

二叉搜索树范围节点和递归函数疑问及递归学习资源求助

二叉搜索树范围和递归问题解答

示例代码

var rangeSumBST = function(root, low, high) {
    let sum=0;

    if(root){
        sum+=(root.val>=low&&root.val<=high)?root.val:0;
        sum+=rangeSumBST(root.left,low,high);
        sum+=rangeSumBST(root.right,low,high);
    }
    
    return sum;
};

这是一个计算二叉搜索树中指定区间节点值总和的函数。

关于递归中sum初始化的疑问

每次递归调用时sum被初始化为0完全没问题,原因很直接:

  • 每一次递归调用都是独立的函数执行实例,每个实例里的sum都是全新的变量,互相不会影响。
  • 当前函数的sum会先计算当前节点的贡献(符合区间就加节点值,否则加0),再加上左子树递归返回的总和,再加上右子树递归返回的总和,最后把这个结果返回给上一层调用。
  • 举个小例子:如果当前是符合条件的叶子节点,它的sum初始为0,加上自身值后变成对应数,左右子树都是null,递归返回0,最终这个数会被返回给父节点,父节点把它加到自己的sum里,层层汇总后就得到整棵树的结果。

此处递归的核心逻辑

这个递归本质是后序遍历的变种,执行流程是:

  1. 先判断当前节点是否存在,不存在直接返回0。
  2. 计算当前节点的贡献值。
  3. 递归遍历左子树,获取左子树的符合区间总和。
  4. 递归遍历右子树,获取右子树的符合区间总和。
  5. 将当前节点贡献、左子树总和、右子树总和相加,返回给上层调用。
    终止条件就是节点为null,此时没有节点值可以贡献,返回0。

递归学习建议

  • 先啃基础:抓住递归的两个核心——终止条件和递归步骤,从简单问题练手(比如阶乘、求数组和)。
  • 结合树结构练习:二叉树的三种遍历(前序、中序、后序)是递归的经典场景,多写几遍就能摸透递归在树里的执行路径。
  • 手动推演流程:拿一个小型二叉树代入你的代码,一步步写出每个递归调用的sum值和返回结果,直观感受递归的栈式执行过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:35:04