872。叶相似树

问题描述 投票:0回答:1

[问题链接][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;
};

第一种情况失败了。看起来是什么问题?

tree binary-tree
1个回答
0
投票

问题出在你的

forEach
循环上。在回调中你
return true
,但是那只是退出回调函数,而不是
leafSimilar
return
中唯一的
leafSimilar
语句的形式为
return false
,因此它永远不会返回
true

要解决此问题,请使用

every
而不是
forEach

不是错误,但您可以在该回调中返回布尔表达式

element === leaf2[index]

    return leaf1.every((element, index) => element == leaf2[index]);
© www.soinside.com 2019 - 2024. All rights reserved.