思路: 两个函数,主函数,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)