《剑指offer》 树的子结构
本题来自《剑指offer》 树的子结构
题目:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
分两步走:
第一步:判断根节点,两个根节点若相同,则进入第二步,否则继续寻找根节点
第二步:两个数自行遍历,直到根节点为止
Python Code:
# -*- 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 return self.issubtree(pRoot1,pRoot2) def issubtree(self,p1,p2): if p2 == None: #如果p2为空了说明p2全部匹配上了,所以返回是子结构 return True if p1 == None: #母结构为空,返回假 return False res = False if p1.val == p2.val: #第一步,即比较两个头结点是否相等 #头结点相等的情况下,递归匹配其左右子节点 res = self.issubtree(p1.left,p2.left) and self.issubtree(p1.right,p2.right) #分别从左右子节点开始调用,去匹配 return res or self.issubtree(p1.left,p2) or self.issubtree(p1.right,p2)