[问题链接][1] [1]:https://leetcode.com/problems/leaf-similar-trees/description/?envType=study-plan-v2&envId=leetcode-75
问题: 考虑二叉树的所有叶子,从左到右顺序,这些叶子的值形成叶子值序列。
例如,在上面给定的树中,叶子值序列为(6,7,4,9,8)。
如果两个二叉树的叶子值序列相同,则认为它们是叶子相似的。
当且仅当两个给定的头节点 root1 和 root2 的树叶子相似时,才返回 true。
我的解决方案:
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;}
leaf1.forEach((element, index) => {
if(element == leaf2[index]){
return true;
}
});
return false;
};
第一种情况失败了。看起来是什么问题?
问题出在你的
forEach
循环上。在回调中你return true
,但是那只是退出回调函数,而不是leafSimilar
。 return
中唯一的 leafSimilar
语句的形式为 return false
,因此它永远不会返回 true
。
要解决此问题,请使用
every
而不是 forEach
。
不是错误,但您可以在该回调中返回布尔表达式
element === leaf2[index]
:
return leaf1.every((element, index) => element == leaf2[index]);