Java——树的子结构

这篇具有很好参考价值的文章主要介绍了Java——树的子结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接

牛客在线oj题——树的子结构

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构
Java——树的子结构
数据范围:
0 <= A的节点个数 <= 10000
0 <= B的节点个数 <= 10000

题目示例

示例1

输入:
{8,8,7,9,2,#,#,#,#,4,7},{8,9,2}

返回值:
true

示例2

输入:
{1,2,3,4,5},{2,4}

返回值:
true

示例3

输入:
{1,2,3},{3,1}

返回值:
false

解题思路

首先,要判断一个二叉树是否是另外一个二叉树的子树,就需要判断两颗树是否完全一样

那么先介绍一下判断两棵树完全一样的方法:如果root2 == null,说明已经递归到root2的尽头了,返回true

如果root1为空,此时root2肯定不为空,那么说明root1和root2不相等,返回false

分别判断root1.left和root2.left是否相等,root1.right和root2.right是否相等,两者都相等返回true,否则返回false

接下来介绍如何判断root2是否为root1的子结构,如果root1或者root2为空,题目中说到空树不是任意一个树的子结构,直接返回false

然后判断root1.val和root2.val是否相等,如果相等则开始用上面介绍的方法比较root1和root2是否相等

否则的话就递归root1.left和root2是否相等,root1.right和root2是否相等,只要有一个相等就返回true文章来源地址https://www.toymoban.com/news/detail-419816.html

完整代码

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1 == null || root2 == null){
            return false;
        }
        boolean result = false;
        if(root1.val == root2.val){
            result = isSameChild(root1, root2);
        }
        if(!result){
            result = HasSubtree(root1.left, root2);
        }
        if(!result){
            result = HasSubtree(root1.right, root2);
        }
        return result;
    }

    /**
     * 判断左右子树是否相等
     * @param root1
     * @param root2
     * @return
     */
    private boolean isSameChild(TreeNode root1, TreeNode root2) {
        if(root2 == null){
            return true;
        }
        if(root1 == null){
            return false;
        }
        if(root1.val != root2.val){
            return false;
        }
        return isSameChild(root1.left, root2.left) && isSameChild(root1.right, root2.right);
    }
}

到了这里,关于Java——树的子结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图神经网络论文笔记(一)——北邮:基于学习解纠缠因果子结构的图神经网络去偏

    作者 :范少华 研究方向 :图神经网络 论文标题 : 基于学习解耦因果子结构的图神经网络去偏 论文链接 :https://arxiv.org/pdf/2209.14107.pdf         https://doi.org/10.48550/arXiv.2209.14107   大多数图神经网络(GNNs)通过学习输入图和标签之间的相关性来预测不可见图的标签。然而,

    2024年02月07日
    浏览(46)
  • 【数据结构】二叉树的相关操作以及OJ题目

    当一个树不是满二叉树或完全二叉树时,它是不适合使用数组存储的,它应该使用链式结构来存储。 再看二叉树基本操作前,再回顾下二叉树的概念,二叉树是: 空树 非空:根节点,根节点的左子树、根节点的右子树组成的。 从概念中可以看出,二叉树定义是递归式的,因

    2024年03月19日
    浏览(50)
  • Java数据结构——二叉树的遍历

     作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网 点击注册和我一起刷题 文章目录 1.创建二叉树 2.二叉树的三种遍历方式 3.代码实现遍历 前序遍历

    2024年01月22日
    浏览(49)
  • Java 数据结构篇-实现 AVL 树的核心方法

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 AVL 树的说明         2.0 AVL 树的成员变量及其构造方法         3.0 实现 AVL 树的核心方法         3.1 获取当前节点的高度 height(AVLNode node)         3.2 更新当前节点的高度 updateHe

    2024年01月23日
    浏览(46)
  • 数据结构-树的遍历和基本操作(Java实现)

    二叉树的遍历分为以下三种:  前序遍历: 访问顺序为  根节点----左子树----右子树 中序遍历: 访问顺序为  左子树----根节点----右子树 后序遍历: 访问顺序为  左子树----右子树----根节点 接下来针对这3种遍历方式进行详细介绍: 上图前序遍历顺序为 1 2 3 4 5 6 上图中序遍历顺序

    2024年03月25日
    浏览(44)
  • Java 数据结构篇-实现红黑树的核心方法

      🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍      文章目录         1.0 红黑树的说明         2.0 红黑树的特性         3.0 红黑树的成员变量及其构造方法         4.0 实现红黑树的核心方法         4.1 红黑树内部类的核心方法         (1)判

    2024年01月24日
    浏览(45)
  • Java 数据结构篇-实现二叉搜索树的核心方法

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 二叉搜索树的概述         2.0 二叉搜索树的成员变量及其构造方法         3.0 实现二叉树的核心接口         3.1 实现二叉搜索树 - 获取值 get(int key)         3.2 实现二叉搜索树

    2024年02月04日
    浏览(54)
  • 头歌(educoder)实训作业题目及答案分享 ——1-4 Java入门 - 分支结构

    📜个人简介 :  作者简介:大家好,我是Passenger.n✌️  支持一下:点赞👍+收藏🌟+留言📪 📣 系列专栏:java基础🍁 ✉️格言:花有重开日,人无再少年!🌞 万事开头难,既然迈开了这一步,那就坚持走下去! 这是我的第一篇博客,希望萌新看了有收获,大佬看了给指

    2024年02月06日
    浏览(105)
  • Java 数据结构篇-二叉树的深度优先遍历(实现:递归方式、非递归方式)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍    文章目录         1.0 二叉树的说明         1.1 二叉树的实现         2.0 二叉树的优先遍历说明         3.0 用递归方式实现二叉树遍历         3.1 用递归方式实现遍历 - 前序遍历         3.2 用递归

    2024年02月05日
    浏览(53)
  • 【Java数据结构】二叉树的前中后序遍历(递归和非递归)

    二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 前序遍历的遍历方式是 先根节点 在左节点 在右节点 述这棵树前序遍历的结果是: A B D E C F G 递归的思想就是把问题拆分成一个个小问题来解决 treeNode是一个内部类 具体实现

    2023年04月26日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包