面试18:树的子结构

【题目描述】
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
【思路】
递归,
issubstree(root1,root2)判断root2是否为root1的子树,且根值相等
若当前pRoot1的根节点不等于pRoot2,则分别pRoot1探索左右子树是否存在子树pRoot2。
【代码】

# 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
        #case1:当前值相等
        res = False
        if pRoot1.val == pRoot2.val:
            #则判断根节点下是不是pRoot2的子树
            res = self.issubstree(pRoot1,pRoot2)
        if res == False:
            #探索左子树
            res = self.HasSubtree(pRoot1.left,pRoot2)
        if res ==False:
            #探索右子树
            res = self.HasSubtree(pRoot1.right,pRoot2)
        return res
    def issubstree(self,root1,root2):
        if root2 == None:
            #说明root2全部匹配成功
            return True
        if root1 == None:
            #搜索完root1,无匹配
            return False
        if root1.val != root2.val:
            #不相等则说明当前子树不相等
            return False
        #当前匹配,需要左右子树都需要匹配
        return self.issubstree(root1.left,root2.left) and self.issubstree(root1.right,root2.right)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,387评论 0 13
  • 上一篇文章讲述了树的概念, 特征以及分类, 旨在让我们理解什么是树, 树的一些常用的概念是什么,树的分类有哪些等。...
    DevCW阅读 6,288评论 4 10
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,935评论 1 31
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 11,087评论 0 19
  • 人生活在这个世上,多多少少要与外界有着这样或者那样的联系,每个人也并不是作为单独的个体存活于这世上。 因此,我们需...
    寻心语馨阅读 1,378评论 0 0