题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
1. 首先我们先判断一下树的根值是否相等
2. 如果相等时我们可以写一个可以判断该根左右孩子结点是否相等的递归函数。这个函数主要是判断B数是否是A数的子结构
3. 如果不相等的话,找大树的左右孩子结点当根结点,递归到步骤1
# -*- 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
if pRoot1==None or pRoot2==None:
return False
res = False
if pRoot1.val==pRoot2.val:
#如果结点相等,Subtree函数负责判断
#这两个结点的孩子是否相等
res = Solution.Subtree(self,pRoot1,pRoot2)
if not res:
res = Solution.HasSubtree(self,pRoot1.left,pRoot2)
if not res:
res = Solution.HasSubtree(self,pRoot1.right,pRoot2)
return res
def Subtree(self,pRoot1,pRoot2):
#下面的俩个if不能交换位置
if pRoot2==None:
return True
if pRoot1==None:
return False
if pRoot1.val!=pRoot2.val:
return False
#左右同时相等时
return Solution.Subtree(self,pRoot1.left,pRoot2.left) and Solution.Subtree(self,pRoot1.right,pRoot2.right)