请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。
示例 1:
输入: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:
输入:root1 = [1,2,3], root2 = [1,3,2]
输出:false
class Solution:
def leafSimilar(self, root1, root2):
二叉树(node.left, node.right)
写在类里
class Solution():
def __init__(self):
self.lst1 = []
self.lst2 = []
二叉树的结果决定不需要这一步
def dfs(node):
if node:
因为我们不求“枝干”只求“叶“,所以条件就是二叉树末端
if not node.left and not node.right:
self.lst.append(node.val)
dfs(node.left)
dfs(node.right)
先根据lst 1,2写两个函数
再执行
最后判断
return self.lst1 == self.lst2
class Solution():
def __init__(self):
self.lst1 = []
self.lst2 = []
def leafSimilar(self, root1: TreeNode, root2: TreeNode) -> bool:
def dfs1(node):
if node:
if not node.left and not node.right:
self.lst1.append(node.val)
dfs1(node.left)
dfs1(node.right)
def dfs2(node):
if node:
if not node.left and not node.right:
self.lst2.append(node.val)
dfs2(node.left)
dfs2(node.right)
dfs1(root1)
dfs2(root2)
return self.lst1 == self.lst2
class Solution:
def leafSimilar(self, root1, root2):
def dfs(node):
if node:
if not node.left and not node.right:
yield node.val
yield from dfs(node.left)
yield from dfs(node.right)
return list(dfs(root1)) == list(dfs(root2))