《剑指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)

 

总结:

posted @ 2019-04-28 13:57  weilongyitian  阅读(196)  评论(0编辑  收藏  举报