# 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 classSolution: defisSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool: defdfs1(tree1): ifnot tree1: returnFalse if tree1.val == subRoot.val: ans = dfs2(tree1, subRoot) if ans: return ans left = dfs1(tree1.left) right = dfs1(tree1.right) return left or right
defdfs2(tree1, tree2): ifnot tree1 andnot tree2: returnTrue ifnot tree1 ornot tree2: returnFalse if tree1.val != tree2.val: returnFalse left = dfs2(tree1.left, tree2.left) right = dfs2(tree1.right, tree2.right) return left and right return dfs1(root)