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

二叉树的直径问题——返回数组方式的实现错误排查

二叉树直径求解代码错误分析

你的代码在处理最大直径不经过根节点的测试用例时失败,核心问题是max参数采用值传递,递归过程中无法正确传递子树中更新后的最大值。

错误原因详解:

当你调用dfs(root.left, max)时,左子树递归计算出的最大直径会存在left[1]里,但你在调用dfs(root.right, max)时,传入的还是最初的max值,并没有把左子树找到的更大值传递给右子树的递归。最后计算当前节点的max时,只和原始的max比较,完全忽略了左右子树内部已经找到的更大直径。这就导致如果最大直径出现在左或右子树的内部,这个值无法被传递到上层递归,最终返回的结果自然会出错。

修正后的代码:

var diameterOfBinaryTree = function(root) {
    const result = dfs(root);
    return result[1];
};

function dfs(root) {
    if (!root) return [0, 0];
    const left = dfs(root.left);
    const right = dfs(root.right);

    const height = 1 + Math.max(left[0], right[0]);
    // 同时比较左子树最大值、右子树最大值、当前节点的左右高度和
    const currentMax = Math.max(left[1], right[1], left[0] + right[0]);

    return [height, currentMax];
}

修正要点:

  • 移除dfs函数的max参数,避免值传递带来的更新丢失问题
  • 每次递归计算currentMax时,必须纳入左右子树已经找到的最大值,确保子树内部的最大直径能被传递到上层
  • 空节点返回[0, 0],表示高度为0,直径为0

内容的提问来源于stack exchange,提问作者tommy-ling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:20:25