# -*- 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):
result = False
if pRoot1 is not None and pRoot2 is not None:
if pRoot1.val == pRoot2.val:
result = self.DoesTree1HasTree2(pRoot1,pRoot2)
if result==False:
result = self.HasSubtree(pRoot1.left,pRoot2)
if result==False:
result = self.HasSubtree(pRoot1.right,pRoot2)
return result
def DoesTree1HasTree2(self, node1, node2):
if node2==None:
return True
if node1==None:
return False
if node1.val != node2.val:
return False
return self.DoesTree1HasTree2(node1.left,node2.left) and self.DoesTree1HasTree2(node1.right,node2.right)
解释:这里是双递归来实现的二叉树B是否包含二叉树A,首先外层的递归是根节点A,B是否满足条件,如果不满足条件,那么换左孩子,如果还不满足条件换右孩子。内层循环就是那个条件,即在这个根节点上B是否包含A。
递归的话要考虑递归终止条件,外层循环返回result就行,内层循环,如B为空,那么查找成功,如A为空,失败,如果两节点值不同,失败。