想法:
我们可以先建立一个helper function检查两个树是否相等,并把它应用在判断子树的function中。
代码:
# 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, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
#如果子树是null,返回True。
if not subRoot: return True
#如果root是null,返回False。
if not root: return False
#使用helper function判断两个树是否相等。
if self.isIdentical(root, subRoot):
return True
#用recursive的方法检查root的左子树和subRoot,以及root的右子树和subRoot。
return self.isSubtree(root.left, subRoot) or self.isSubtree(root.right, subRoot)
#helper function
def isIdentical(self, s, t):
#如果两个树都没有node,证明相等。
if not s and not t:
return True
#如果两个树都有node,并且value相等。
if s and t and s.val == t.val:
#用recursive的方法检查两个树的左子树和右子树。
return self.isIdentical(s.left, t.left) and self.isIdentical(s.right, t.right)
#如果一个树有node,另一个没有,证明不相等。
return False