leetcode_872 叶子相似的树

100 阅读1分钟

要求

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

image.png

举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。

如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。

如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。

  示例 1:

image.png

输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
输出:true

示例 2:

输入:root1 = [1], root2 = [1]
输出:true

示例 3:

输入:root1 = [1], root2 = [2]
输出:false

示例 4:

输入:root1 = [1,2], root2 = [2,2]
输出:true

示例 5:

image.png

输入:root1 = [1,2,3], root2 = [1,3,2]
输出:false

核心代码

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
class Solution:
    def leafSimilar(self, root1: TreeNode, root2: TreeNode) -> bool:
        leaf1,leaf2 = list(),list()
        def dfs(node,leaf):
            if not node:
                return
            if not node.right and not node.left:
                leaf.append(node.val)
                return 
            dfs(node.left,leaf)
            dfs(node.right,leaf)
        
        dfs(root1,leaf1)
        dfs(root2,leaf2)
        return leaf1 == leaf2

image.png

解题思路:我们使用深度优先遍历,获取到所有的叶子节点,然后比较两个树的叶子节点列表即可。