572. 另一个树的子树
题目描述
解题思路
1、需要遍历s所有节点,以s每个节点为起点与t比较
2、isSame()判断两颗树是否一毛一样
代码实现
- 实现形式一
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
"""
参考官方答案下的评论
1. 需要遍历s所有节点,以s每个节点为起点与t比较
2. isSame()判断两颗树是否一毛一样
"""
def dfs(s, t) -> bool:
if not s:
return False
return isSame(s, t) or dfs(s.left, t) or dfs(s.right, t)
def isSame(p: TreeNode, q: TreeNode) -> bool:
if p is None and q is None:
return True
if p is None or q is None or p.val != q.val:
return False
return isSame(p.left, q.left) and isSame(p.right, q.right)
return dfs(s, t)
- 实现形式二
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
"""
参考官方答案下的评论
1. 需要遍历s所有节点,以s每个节点为起点与t比较
2. isSame()判断两颗树是否一毛一样
"""
if not s:
return False
if s.val == t.val and self.isSame(s, t):
return True
else:
return self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
def isSame(self, p: TreeNode, q: TreeNode) -> bool:
if p is None and q is None:
return True
if p and q and p.val == q.val and self.isSame(p.left, q.left) and self.isSame(p.right, q.right):
return True
return False
参考文献
1、官方题解