1.问题描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
2.思路解析
(1)先递归判断A的结点值和B根节点值是否相等,相等再继续判断是否可能为子树。
(2)判断是否为子树时,递归判断左右子树是否相等。
3.python代码
# 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
if pRoot1==None or pRoot2==None:
return False
if pRoot1.val==pRoot2.val and self.Equal(pRoot1, pRoot2):
return True
if pRoot1.left and self.HasSubtree(pRoot1.left,pRoot2):
return True
if pRoot1.right and self.HasSubtree(pRoot1.right,pRoot2):
return True
return False
def Equal(self, pRoot1, pRoot2):
if pRoot1 == None:
return False
if pRoot1.val==pRoot2.val:
left = self.Equal(pRoot1.left, pRoot2.left) if pRoot2.left else True
right = self.Equal(pRoot1.right, pRoot2.right) if pRoot2.right else True
if left and right:
return True
return False