微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

叶相似树 示例 1:示例 2:示例 3:示例 4:

如何解决叶相似树 示例 1:示例 2:示例 3:示例 4:

问题的网址:https://leetcode.com/problems/leaf-similar-trees/

问题:

考虑一棵二叉树的所有叶子,从左到右的顺序, 这些叶子的值形成一个叶子值序列

enter image description here

例如,在上面给定的树中,叶子值序列是(6,7,4,9,8)

如果两个二叉树的叶子值,则认为它们是叶子相似的 顺序是一样的。

返回 true 当且仅当两个给定的头节点为 root1 的树 和 root2 是叶子相似的。

示例 1:

enter image description here

输入:

root1 = [3,5,1,6,2,8,null,4],root2 = [3,8]

输出:真

示例 2:

输入:

root1 = [1],root2 = [1]

输出:真

示例 3:

输入:

root1 = [1],root2 = [2]

输出:假

示例 4:

输入:

root1 = [1,2],root2 = [2,2]

输出:真

我的代码

class Solution:
    def leafSimilar(self,root1: TreeNode,root2: TreeNode) -> bool:
        def dfs(node1,res=[]):
            if res == None:
                res=[]
            if node1:
                self.leafSimilar(node1.left,None)                
                self.leafSimilar(node1.right,None)
                if node1.left == None and node1.right == None:
                    res.append(node1.val)
                return (res)  
        return (dfs(root1)) == (dfs(root2))

通过了 20 个案例,但它卡在第 21 个测试案例上。 失败的测试用例:

Input: root1 = [1,3],root2 = [1,3,2]
Expected Output: false

我的输出 = 真

结果叶节点是 [2,3] 和 [3,2],因此它在不应该时说真。我曾尝试使用 list 和 set ,因为我认为这会比较序列但没有运气。我该怎么办?

解决方法

您不应递归调用 leafSimilar,而应调用 dfs。此外,不需要传递 dfs 第二个参数,因为其想法是让一个调用返回一个列表,该列表在给定节点的子树中具有叶子。所以它独立于其他调用。然后将你从左右孩子得到的列表连接成一个列表:

def dfs(node1):
    if not node1:
        return []
    res = dfs(node1.left) + dfs(node1.right)
    if node1.left is None and node1.right is None:
        res.append(node1.val)
    return res

这个函数的初始调用可以保持原样,尽管实际上不需要额外的括号:

return dfs(root1) == dfs(root2)

小注意:与None比较时,通常的做法是使用is(身份)而不是==

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。