LeetCode 872:二叉树叶子相似性递归解法返回错误结果求助
LeetCode 872《Leaf Similar Trees》代码问题分析
你的代码核心问题出在叶子序列的比较逻辑上:
- 你使用
leaf1.forEach(...)遍历数组时,回调函数里的return true仅会跳出当前回调函数,既不会终止整个遍历过程,也无法让外层的leafSimilar函数返回true。 - 无论两个叶子数组的元素是否完全匹配,代码最终都会执行到函数末尾的
return false,这就是示例1预期返回true但你的代码返回false的根本原因。
修正方案
可以用以下几种方式替换原有forEach的比较逻辑:
- 普通for循环(推荐):逐个比较元素,发现不匹配立即返回
false,全部匹配完成后返回true:
for (let i = 0; i < leaf1.length; i++) { if (leaf1[i] !== leaf2[i]) { return false; } } return true;
- 数组every方法:简洁判断所有元素是否匹配:
return leaf1.every((val, idx) => val === leaf2[idx]);
- 字符串拼接比较(仅适用于叶子值为纯数字的场景):
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
相关产品推荐
相关产品推荐

