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

二叉树子树和为偶数节点打印 JS实现错误排查

代码问题分析

你当前的代码有两个核心错误,刚好对应你遇到的异常输出:

  • 递归返回值缺失:isEven函数仅在空节点时返回0,非空节点处理完成后没有返回当前子树的总和,导致上层节点计算left、right时拿到的是undefined,求和得到NaN,模2判断直接失效。只有叶子节点因为左右子节点都是空(返回0),计算逻辑暂时正常,所以你只会看到所有叶子节点的输出。
  • 多余的顶层打印:你最后执行console.log(isEven(a)),但isEven本身没有返回值,所以会额外打印一个undefined。

修正方案

  1. 补全递归返回值:非空节点处理完成后,返回当前子树的总和,供上层节点计算使用
  2. 移除顶层的console.log包裹,直接调用递归函数即可
  3. (可选匹配你预期的输出)按照你提到的笔误,将f节点的数值修改为非2的值,避免额外输出2

修正后代码如下:

class Node {
  constructor(val) {
    this.val = val;
    this.left = null;
    this.right = null;
  }
}

const a = new Node(3);
const b = new Node(11);
const c = new Node(4);
const d = new Node(4);
const e = new Node(-2);
const f = new Node(1); // 按笔误说明修改为1,避免输出2

a.left = b;
a.right = c;
b.left = d;
b.right = e;
c.right = f;

//       3
//    /    \
//   11     4
//  / \      \
// 4   -2     1

const printEvenSumNode = (node) => {
  if (node === null) return 0;
  const leftSum = printEvenSumNode(node.left);
  const rightSum = printEvenSumNode(node.right);
  const currentSubtreeSum = leftSum + rightSum + node.val;
  if (currentSubtreeSum % 2 === 0) {
    console.log(node.val);
  }
  return currentSubtreeSum; // 补全子树和返回
};

printEvenSumNode(a);

运行后输出为4、-2、4、3,是后序遍历的顺序,和你预期的节点值完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:15:08