如何解决叶相似树 示例 1:示例 2:示例 3:示例 4:
问题的网址:https://leetcode.com/problems/leaf-similar-trees/
问题:
考虑一棵二叉树的所有叶子,从左到右的顺序, 这些叶子的值形成一个叶子值序列。
例如,在上面给定的树中,叶子值序列是(6,7,4,9,8)
。
如果两个二叉树的叶子值,则认为它们是叶子相似的 顺序是一样的。
返回 true
当且仅当两个给定的头节点为 root1
的树
和 root2
是叶子相似的。
示例 1:
输入:
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 举报,一经查实,本站将立刻删除。