1. 思路
- 先看根节点是否一样,若相同,则判断A是否包含B
- 若根节点不同,遍历A的左右子树
2. 代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
# write code here
# 当pRoot1和pRoot2的根节点重合时,判断pRoot1中是否有pRoot2
def isSame(t1,t2):
if t2 is None: return True # 这一句和下面一句不能反,因为只有在t2不为空且t1为空时才能判断False。t1和t2恰好同时为空也有可能是True
if t1 is None: return False
if t1.val != t2.val:
return False
return isSame(t1.left, t2.left) and isSame(t1.right,t2.right)
# 空树不是任意一个树的子结构
if pRoot1 == None or pRoot2 == None:
return False
if isSame(pRoot1, pRoot2):
return True
return self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)