美文网首页剑指Offer-Python-牛客网
面试题26:树的子结构

面试题26:树的子结构

作者: 凌霄文强 | 来源:发表于2019-01-07 22:44 被阅读0次

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

知识点

二叉树


Qiang的思路

这道题主要考虑的是二叉树的遍历。典型的,我们可以通过递归的方式实现二叉树的遍历。

想要判断B是不是A的子结构,自然需要对A和B进行遍历。首先,需要找到遍历的起始点,通过遍历树A,我们能找到在A中和B的根节点相同的节点。然后对于这些节点,同时遍历A和B,看一下是不是以该节点开头的子树的一部分和B相同,如果相同则证明B就是A的子结构,如果所有节点都不满足条件,那就说明B不是A的子结构。

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def getResult(self, pRoot1, pRoot2):
        if pRoot2==None:
            return True
        if pRoot1==None:
            return False
        if pRoot1.val!=pRoot2.val:
            return False
        result1=self.getResult(pRoot1.left, pRoot2.left)
        result2=self.getResult(pRoot1.right, pRoot2.right)
        if result1==True and result2==True:
            return True
        return False
           
    def HasSubtree(self, pRoot1, pRoot2):
        # write code here
        if pRoot1==None or pRoot2==None:
            return False
        if pRoot1.val==pRoot2.val:
            if self.getResult(pRoot1, pRoot2)==True:
                return True
        result1=self.HasSubtree(pRoot1.left, pRoot2)
        result2=self.HasSubtree(pRoot1.right, pRoot2)
        if result1==True or result2==True:
            return True
        return False

在编写代码的过程中,需要注意的一点就是判断是不是子结构的终止条件。因为当B是子结构时,并不意味这他就是子树,所以当遍历到B的叶子节点时就认为当前所判断的均满足子结构的条件,并不需要A和B同时满足子节点。


作者原创,如需转载及其他问题请邮箱联系:lwqiang_chn@163.com
个人网站:https://www.myqiang.top

相关文章

  • LeetCode | 面试题26. 树的子结构【Python】

    LeetCode 面试题26. 树的子结构【Medium】【Python】【DFS】 问题 力扣 输入两棵二叉树A...

  • 面试题26:树的子结构

    输入两棵二叉树A,B,判断B是不是A的子结构。 ps:我们约定空树不是任意一个树的子结构 思路一:总的分为两步第一...

  • 面试题26:树的子结构

    题目 输入两颗二叉树A和B,判断B是不是A的子结构。二叉树的节点定义如下: 解题思路 在树A中找出和树B的根节点的...

  • 面试题26: 树的子结构

    题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路:这道题...

  • 面试题26:树的子结构

    题目:输入两颗二叉树A和B,判断B是不是A的子结构,二叉树节点的定义如下: 思路:通过递归来实现。先判断A和B的根...

  • 面试题26:树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 知识点 二叉...

  • 面试题26:树的子结构

    该题的思路应该使用递归来判断,通过判断左子树和右子树来判断树是否是子结构,当子结构为空时,则判断成功

  • 面试题26:树的子结构

    题目描述 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点的定义如下: 解题思路 在树A中查找于根节点的值...

  • 面试题26. 树的子结构

    题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中...

  • 面试题26. 树的子结构

    题目描述 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 ...

网友评论

    本文标题:面试题26:树的子结构

    本文链接:https://www.haomeiwen.com/subject/vpqmrqtx.html