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

LeetCode 872:二叉树叶子相似性递归解法返回错误结果求助

LeetCode 872《Leaf Similar Trees》代码问题分析

你的代码核心问题出在叶子序列的比较逻辑上:

  • 你使用leaf1.forEach(...)遍历数组时,回调函数里的return true仅会跳出当前回调函数,既不会终止整个遍历过程,也无法让外层的leafSimilar函数返回true。
  • 无论两个叶子数组的元素是否完全匹配,代码最终都会执行到函数末尾的return false,这就是示例1预期返回true但你的代码返回false的根本原因。

修正方案

可以用以下几种方式替换原有forEach的比较逻辑:

  1. 普通for循环(推荐):逐个比较元素,发现不匹配立即返回false,全部匹配完成后返回true:
for (let i = 0; i < leaf1.length; i++) {
    if (leaf1[i] !== leaf2[i]) {
        return false;
    }
}
return true;
  1. 数组every方法:简洁判断所有元素是否匹配:
return leaf1.every((val, idx) => val === leaf2[idx]);
  1. 字符串拼接比较(仅适用于叶子值为纯数字的场景):
return leaf1.join(',') === leaf2.join(',');

修正后的完整代码

var leafSimilar = function(root1, root2) {
    let leaf1 = [];
    let leaf2 = [];
    function dfs(root, leaf){
        if(!root){
            return;
        }
        if(root.left == null && root.right == null){
            leaf.push(root.val);
            return;
        } else {
            dfs(root.left, leaf);
            dfs(root.right, leaf);
        }
    }
    dfs(root1, leaf1);
    dfs(root2, leaf2);
    if(leaf1.length !== leaf2.length){return false;}
    // 替换原有的forEach逻辑
    for (let i = 0; i < leaf1.length; i++) {
        if (leaf1[i] !== leaf2[i]) {
            return false;
        }
    }
    return true;
};

内容的提问来源于stack exchange,提问作者ananya-singh-afk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:05:08