剑指offer:树的子结构

剑指offer:树的子结构

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

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def HasSubtree(self, pRoot1, pRoot2):
        def helper(root1, root2):
            # 如果root2已经遍历完了,说明root2的每一个节点都能在pRoot1找到对应的节点
            if not root2:
                return True
            # 如果pRoot1遍历完而pRoot2还没遍历完,说明这root1不是对应的子树根节点
            if not root1:
                return False
            # 如果遍历过程中存在值不相等的节点,说明不是要找的子树
            if root1.val != root2.val:
                return False
            # 如果当前节点的值相同,那么继续遍历剩下的节点
            return (helper(root1.left, root2.left)
                    and helper(root1.right, root2.right))

        # 由于题目规定,空树不是子结构,所以特殊处理这种情况
        if not pRoot2 or not pRoot1:
            return False

        res = False
        # 首先找到pRoot1中与pRoot2的根节点的值相同的节点root1,
        # 然后按照与pRoot2相同的顺序去遍历找到的root1,如果以root1为根节点的子树和pRoot2一样
        # 那么说明在pRoot1中找到了跟pRoot2一样的子树。
        if pRoot1.val == pRoot2.val:
            res = helper(pRoot1, pRoot2)
        if not res:
            # 递归遍历pRoot1,直到找到一个子树或者遍历完整棵树
            res = self.HasSubtree(pRoot1.left, pRoot2) \
                  or self.HasSubtree(pRoot1.right, pRoot2)
        return res

转载于:https://blog.51cto.com/jayce1111/2383769

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100958.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10自带恶意软件删除工具

    win10自带恶意软件删除工具win+R—>mrt回车点击下一步启动工具待完成后即检测完毕

    2022年6月24日
    36
  • python机器学习手写算法系列——线性回归「建议收藏」

    python机器学习手写算法系列——线性回归「建议收藏」本文致力于手把手教你实现一个最简单的机器学习模型–一元线性回归模型。短短的14行代码,就实现了。希望读完以后,你也能自己实现它。并对线性回归有更好的了解,或者从不了解到了解。

    2022年8月21日
    6
  • networkx之图遍历和图绘制

    networkx之图遍历和图绘制networkx之图遍历和图绘制文章目录networkx之图遍历和图绘制图数据读取后默认标签(labels)为索引,如何使用编号id?图数据读取后,如何得到节点集和边集?如何绘制多样的图?图数据读取后默认标签(labels)为索引,如何使用编号id?例如在读取football数据时,其labels都是节点的英文名称,这样在处理图数据时不是很方便,往往报错,我们通常习惯处理节点的编号从1开始,可以建立label-id的反向索引,如果处理图数据时只需要编号id,可以将labels属性设置为id,如果之后还

    2022年5月9日
    57
  • 阿里开源数据同步工具–DataX

    阿里开源数据同步工具–DataX下载地址:QuickStartDataX是异构数据源离线同步工具。能够将MySQLsqlServerOracleHiveHBaseFTP之间进行稳定高效的数据同步。设计思路:网状连接-》星型连接目前支持哪些数据同步?:核心架构:推荐使用python2.67不要使用python3,0使用方法和案例:1.准备一个job….

    2022年6月28日
    53
  • MySQL数据库中varchar与char类型的区别

    MySQL数据库中varchar与char类型的区别

    2021年11月5日
    47
  • 把一个数据表导入另一个数据库_把一个表里的数据导入另一个表

    把一个数据表导入另一个数据库_把一个表里的数据导入另一个表文章作者:姜南(Slyar)文章来源:SlyarHome(www.slyar.com)转载请注明,谢谢合作。之前发了《表达式变量批量替换器batchSQL》这篇文章,有童鞋说导入数据用phpMyAdmin提供的csv导入功能不是更好。的确,导入数据进入mysql用这个功能非常好,不过如果需要进行批量操作的是update或者其他操作呢,例如要从新的excel里批量更新某一部分的数据,总不能全…

    2025年11月28日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号