树的子结构(Java实现)

软考29-上午题-【数据结构】-排序 数据结构7种排序 阅读详情

1.题目

在这里插入图片描述

2.解法

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if (root1 == null || root2 == null) return false;
        // 之所以在这里加三种情况,是因为有可能有相同的点
        // 比如根点为8,根点的子结点也为8,但是真正的子结构是从子结点开始的
        return Judge(root1, root2) ||
               Judge(root1.left, root2) || 
               Judge(root1.right, root2);      
        }
    
    
    public boolean Judge(TreeNode root1, TreeNode root2) {
        // 这两个条件由递归式决定,有时候条件决定递归,有时候递归决定条件
        // 我这部分比较完了,返回true
        if (root2 == null) return true;
        // 如果root1,没有根和root2比较,所以返回false
        if (root1 == null) return false;
        
         // 如果根不相等,root2有可能是左子树或者右子树的一部分
         if (root1.val != root2.val) {
            return Judge(root1.left, root2) || Judge(root1.right, root2);      
        }
        return Judge(root1.left, root2.left) && Judge(root1.right, root2.right);
    }
}

时间复杂度时间,最坏情况下,我们对于树A中的每个节点都要递归判断一遍,每次判断在最坏情况下需要遍历完树B中的所有节点。故时间复杂度是 O(nm) ,其中 n是树A中的节点数, m 是树B中的节点数。空间复杂度为递归栈的个数

3.错误总结

切入点:根相等
或者根不相等,有可能左右两树进行比较
递归条件
在主函数中写有几种情况就可。
1、

// 首先root2为空,root1也不一定为空,因为root2只是一部分
// 所以这里错误
if (root1 == null && root2 == null) return true;
// root1为空和root2为空两者代表的情况不一样
// 所以这里错误
if (root1 == null || root2 == null) return false;

2、

// 这两个条件由递归式决定,有时候条件决定递归,有时候递归决定条件
// 我这部分比较完了,返回true
if (root2 == null) return true;
// 如果root1,没有根和root2比较,所以返回false
if (root1 == null) return false;

4.相似的一道题(求树的子树)

在这里插入图片描述

(树的子结构指树的任意一部分,树的子树指它自己、和它的左右两子树,注意区分)

public class IsSubTree {
    public boolean HasSubtree(TreeNode root1, TreeNode root2) {
        if (root1 == null || root2 == null) {
            return false;
        }
        return judgeSubTree(root1, root2) ||
               judgeSubTree(root1.left, root2) ||
               judgeSubTree(root1.right, root2);
    }
 
    private boolean judgeSubTree(TreeNode root1, TreeNode root2) {
        if (root2 == null) {
            return true;
        }
        if (root1 == null) {
            return false;
        }
        if (root1.val != root2.val) {
            return false;
        }
        return judgeSubTree(root1.left, root2.left) &&
               judgeSubTree(root1.right, root2.right);
    }
}
Transformer在CV里太耗算力?手把手拆解Restormer的MDTA与GDFN模块 本文深度解析了CVPR2022最佳论文提名作品Restormer的创新模块MDTA与GDFN,有效解决了Transformer在计算机视觉领域的高计算复杂度问题。通过通道注意力降维和门控前馈网络设计,Restormer在图像恢复重建任务中显著降低计算量,同时保持高性能,为实时图像处理提供了可行方案。 阅读详情

相关推荐

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

树的子结构和子树的区别java

出自剑指offer的一道题《树的子结构》 子树:一颗有n个节点的树也有n个子树,他的每个节点都可以作为根节点构成一颗树 子结构:如下图,红框就是一个子结构,但是不是一颗子树。 换句话说,下图的节点4也是一个子结构但不是子树,这也说应该就好理解了 (图片侵删) 原题描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) public class TreeN...

weixin_43761642的博客 1462

CST微波工作室端口设置保姆级教程:从波导端口到离散端口,手把手教你搞定S参数仿真

本文提供CST微波工作室端口设置的详细教程,涵盖波导端口和离散端口的选择与配置,助力工程师精准完成S参数仿真。通过微带线滤波器案例,详解端口尺寸、阻抗设置及常见问题排查,提升仿真效率与准确性。

weixin_42570296的博客 362

剑指offer:树的子结构(java版)

描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 示例1 输入: {8,8,#,9,#,2,#,5},{8,9,#,2} 返回值: true 解题思路 在树A中查找与树B根节点一样的节点,这实际就是树的遍历。树的遍历可以用递归的方式。 遍历大树,找到与子结构根节点相同的节点,然后传入判断函数进行遍历比较 /** public class TreeNode { int val = 0; TreeNode lef...

bihao8481的博客 95

Landsat卫星数据下载与处理全指南

遥感数据是地球观测的重要技术手段,通过卫星传感器获取地表信息。Landsat系列卫星作为历史最悠久的民用对地观测项目,其多光谱数据在环境监测、资源调查等领域具有广泛应用价值。数据下载涉及USGS EarthExplorer和NASA EarthData两大平台,需了解Tier分级体系确保数据质量。典型处理流程包括辐射定标、大气校正等步骤,结合QGIS、Python等工具可实现高效分析。本文详细介绍Landsat 8/9数据获取方法,涵盖从账号注册到实际应用的完整链路,特别针对几何配准、批量下载等工程实践问题

weixin_29050513的博客 171

普元EOS8.3精简版安装指南:从零开始搭建低代码开发环境

本文详细介绍了普元EOS8.3精简版的完整安装流程。从JDK1.8环境准备、MySQL数据库配置与初始化,到核心配置文件修改、服务启动与登录验证,提供了从零开始搭建低代码开发环境的清晰步骤和常见问题排坑指南,帮助开发者快速部署并体验平台核心功能。

ik678901的博客 1105

树的子结构 -- java

题目描述 输入两棵二叉树A和B,判断B是不是A的子结构,二叉树的节点定义如下: /** * 二叉树节点 * * @Author rex * 2018/8/1 */ public class BinaryTreeNode { double value; BinaryTreeNode left; BinaryTreeNode right; } 解题思路 要查找树A中是否存在和树B结构一样的子树,我们可以分成两步:第一步在树A中找到和B的根结点的值一样的结点R,第二步再判断树

hello world 813

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

weixin_37584728的博客 3467

tree的实现 java, 二叉树的实现

package com.link; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Tree {  private TreeNode root = new TreeNode();  private List nodes = new ArrayList()

xunianchong的专栏 686

CKS-CN考试之路----02

其实我们根据题目也可以知道秘钥是叫clever-cactus。稍作等待后,确认pod的状态,如果是1/1基本就没问题了。这步不一定做.目的是确定秘钥的名字。

Q先生 659

STM32Cube高效开发教程<高级篇><FreeRTOS>(一)-----FreeRTOS基础

一、 FreeRTOS概述声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。写在前面:今天就算正式开始高级篇的博客编写了,我本人也是第一次学习FreeRTOS,所以整体的进度会比较慢,博客更新可能不太会及时,希望大家原谅。一、 FreeRTOS概述。

我的博客 1848

树的子结构 java

树的子结构 java 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 代码1: /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...

柳絮 366

正点原子stm32f103RChal库制作数字秒表:如用keil5和正点原子STM32F1开发板实现?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1266

剑指offer编程题(JAVA实现)——第17题:树的子结构

github https://github.com/JasonZhangCauc/JZOffer /** * * 剑指offer编程题(JAVA实现)——树的子结构 * * 题目描述 * 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) * */ public class Test17 { public boolean ...

JZ 6132

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【编程题】树的子结构(Java实现)

【编程题】树的子结构(Java实现) 题目来源 剑指offer第17题 https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-inter...

qq_40432108的博客 217

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

剑指offer之树的子结构(Java实现)

树的子结构 NowCoder 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路: public class Solution { public static boolean HasSubtree(TreeNode root1, TreeNode root2) { boolean result = false; ...

曾经 438

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

剑指offer:017 树的子结构 附:java实现

题目描述 树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路: 根据值进行遍历比较,如果成功遍历则返回真 java实现: public class Solution { public static boolean HasSubtree(TreeNode root1, TreeNode root2) { ...

陌心的博客 107

剑指Offer26:树的子结构java实现

剑指 Offer 26. 树的子结构 https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/ 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。...

WukongGo的博客 241

Java 实现验证树的子结构

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

MJ_911的博客 377

树的子结构【剑指offer——JAVA实现】

【考点:递归和树的遍历】树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路本题我有两种解题思路:1、使用后序遍历二叉树A/B,得到后序遍历数组后判断两者是否包含的关系2、使用递归去比较每个元素代码实现1/** public class TreeNode { int val = 0; TreeNode left = n...

罗先森何其有幸的博客 478

剑指offer--树的子结构 Java实现

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

qq_41814874的博客 177

《剑指Offer》树的子结构(Java 实现)

文章目录一、题目1.1 题目描述1.2 题目链接二、实现代码 一、题目 1.1 题目描述   输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 1.2 题目链接 《牛客网》:树的子结构 二、实现代码 /** public class TreeNode { int val = 0; TreeNode left = null; Tr...

Coder Yang 242

树的子结构java实现

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;

qq_29606255的博客 309

树的子结构,Java实现,剑指Offer面试题26

主要是考察树的遍历和指针的运用,难度不大 /** * 树的子结构 */ public class Main26 { /** * 入口函数 * 优先检测空指针等特殊情况 * @param root1 * @param root2 * @return */ public boolean HasSubtree(Tree...

aa792978017的博客 201

[剑指 Offer]26 树的子结构 Java实现

题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 输入:A = [1,2,3], B = [3,1] 输出:false 示例 2: 输入:A = [3,4,5,1,2], B = [4,1] 输出:true 代码 OMG这道题写了好久.

BedivereAlter的博客 303
上一篇: 矩形覆盖(Java实现)
下一篇: 顺序打印矩阵(Java实现)
念殊15
博客等级 码龄8年 17粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值