思路: 两个函数,主函数,check函数

1、check,递归判断当前节点,左,右节点是否相同
  • 子树结构先为空,则说明子树全部判断完,返回True
  • 子树不为空,主树为空,则说明子树没判断完,主树无节点判断了,返回False
2、主函数,递归check树的当前节点,当前节点左,右子树的情况
class Solution:
    def HasSubtree(self , pRoot1: TreeNode, pRoot2: TreeNode) -> bool:
        if not pRoot1 or not pRoot2:
            return False
        
        return self.check(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
        
    
    def check(self, p1, p2):
        if not p2:
            return True
        
        if not p1:
            return False
        
        return p1.val == p2.val and self.check(p1.left, p2.left) and self.check(p1.right, p2.right)