Java另一棵树的子树

news2024/9/28 8:11:32

目录

1.题目描述

2.题解

思路分析

具体实现

完整代码


1.题目描述

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

示例:

输入:root = [3, 4, 5, 1, 2],subRoot = [4, 1, 2]

输出:true

2.题解

思路分析

我们首先判断两棵二叉树是否相同,若相同,则subRoot是root的子树;

若不相同,则判断root的左子树是否与subRoot是否相同,若相同,则subRoot是root的子树;

若不同,判断root的右子树是否与subRoot相同,若相同,subRoot是root的子树;

若不同,继续递归判断...

具体实现

1.首先实现判断两棵二叉树是否相同的代码:

(1)若两棵二叉树都为空,则两颗二叉树相同;若两颗二叉树中只有一棵树为空,则不同

(2)若两棵二叉树都不为空,再判断其根节点的值是否相同,若不相同,两棵二叉树不相同;若相同,再分别判断两颗二叉树的左子树是否相同,右子树是否相同。(通过递归实现)

具体过程:

代码实现:

public boolean isSameTree(TreeNode p, TreeNode q) {
    //都为null,相同
    if(p == null && q == null){
        return true;
    }
    //只有一个为null,不同
    if(p == null||  q == null){
        return false;
    }
    //都不为空,但值不为空,不同
    if(p.val != q.val){
        return false;
    }
    //判断两颗二叉树的左子树、右子树是否相同
    return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}

2.判断subRoot是否为root子树

(1)若subRoot为空,则subRoot为root的子树,返回true

(2)若root为空,则subRoot不为root的子树。返回false

(1)判断subRoot是否与root相同

(2)判断subRoot是否是root的左子树

(3)判断subRoot是否是root的右子树

若都不相同,最后返回false

具体过程:

代码实现:

public boolean isSubtree(TreeNode root, TreeNode subRoot) {
    if(subRoot == null){
        return true;
    }
    if(root == null) {
        return false;
    }
    //1、是不是和根节点相同
    if(isSameTree(root,subRoot)) {
        return true;
    }
    //2、判断是不是root的左子树
    if(isSubtree(root.left,subRoot)) {
        return true;
    }
    //3、右子树
    if(isSubtree(root.right,subRoot)) {
        return true;
    }
    //4、返回
    return false;
}

完整代码

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {

        if(p == null && q == null){
            return true;
        }
        if(p == null||  q == null){
            return false;
        }
        if(p.val != q.val){
            return false;
        }
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
    }
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(subRoot == null){
            return true;
        }
        if(root == null) {
            return false;
        }
        //1、是不是和根节点相同
        if(isSameTree(root,subRoot)) {
            return true;
        }
        //2、判断是不是root的左子树
        if(isSubtree(root.left,subRoot)) {
            return true;
        }
        //3、右子树
        if(isSubtree(root.right,subRoot)) {
            return true;
        }
        //4、返回
        return false;
    }
}

题目来自:

572. 另一棵树的子树 - 力扣(LeetCode)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

笔记本外接显示器,edge浏览器播放视频黑屏

记录一下解决的办法 笔记本:联想拯救者R720 外接显示器后,用Edge在B站看视频有时会黑屏 网上搜了一圈,可能是因为笔记本连到了集显导致的 查看了一下显示器,确实连的是集显,找了联想客服,说这个是默认的&a…

若依微服务前后端部署启动流程(只记录)

若依官网:https://www.ruoyi.vip/ 若依源码下载,直接zip既可:RuoYi-Cloud: 🎉 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本 下载解压,导入 idea&…

【已验证】微信小程序开发-绑定数据23.10.09

四. 绑定数据 WXML页面里的动态数据都是来自.js 文件Page的data&#xff0c;数据绑定就是通过双大 括号&#xff08;{{}}&#xff09;将变量包起来&#xff0c;在WXML页面 里将数据值显示出来。 <!--pages/product/product.wxml--> <view> {{ message }} </vi…

tortoise创建本地仓库

1.安装git和tortoise 推荐 TortoiseGit的安装与配置方法 以及 Git TortoiseGit 配置步骤以及本地版本管理 这里记录一下我遇到的问题 1.右键没有创建本地版本库 2 .创建了但是克隆不了 后续专有 一般选专有网络 注意自行谨慎选择 自行负责

6.Docker搭建RabbitMQ

1、端口开放 如果在云服务上部署需在安全组开通一下端口&#xff1a;15672、5672、25672、61613、1883。 15672(UI页面通信口)、5672(client端通信口)、25672(server间内部通信口)、61613(stomp 消息传输)、1883(MQTT消息队列遥测传输)。 2、安装镜像 docker pull rabbitmq 3、…

【ARM CoreLink 系列 6 -- DMC-400控制器简介】

文章目录 1.1 DMC-400 简介1.1.1 DFI&#xff08;DDR PHY Interface&#xff09;1.1.2 DFI 接口组1.1.3 DMC-400 兼容协议1.1.4 DMC-400 特性1.1.5 DMC-400 Interface 1.1 DMC-400 简介 DMC-400是一个由ARM开发、测试和授权的动态内存控制器&#xff0c;同时 DMC-400也是一个符…

jmeter使用csv进行参数化及(运行后出现乱码错误解决)

目录 jmeter使用csv进行参数化 1、准备参数化文本内容&#xff1a;mac没有自带的txt文本编辑器&#xff0c;笔者是在word中新建的然后保存成txt文档 2、进入jmeter中&#xff0c;在线程组中右键添加--配置元件--csv数据文件设置 3、将设置的变量配置到运行脚本中 4、进入线…

InfiniBand网络带宽从SDR、DDR、QDR、FDR、EDR、HDR到NDR发展

InfiniBand&#xff08;直译为 “无限带宽” 技术&#xff0c;缩写为IB&#xff09;是一个为大规模、易扩展机群而设计的网络通信技术。可用于计算机内部或外部的数据互连&#xff0c;服务器与存储系统之间的直接或交换互连&#xff0c;以及存储系统之间的互连。 InfiniBand最重…

部署zabbix监控服务器(第七课)

部署zabbix监控服务器(第七课) 图解 Zabbix是一个开源的网络监控及报警平台&#xff0c;它可以检测并收集各种系统的性能数据&#xff0c;包括网络设备、服务器、应用程序和虚拟机等&#xff0c;并提供可视化的监控报告&#xff0c;帮助用户发现系统问题并进行及时处理。以下是…

Linux虚拟机克隆之后使用ip addr无法获取ip地址

Linux虚拟机克隆之后使用ip addr无法获取ip地址 因为克隆得到的虚拟机&#xff0c;与原先的linux系统是一模一样的包括MAC地址和IP地址。需要修改信息。 设置IP地址&#xff1a; 使用vi命令打开linux的网卡 //ifcfg-enth0是虚拟网卡的名称&#xff0c;如果你的不叫这个名字&a…

AmdU (5-azidomethyl-2‘-deoxyuridine)的反应原理|59090-48-1

产品简介&#xff1a;叠氮甲基dU&#xff08;AmdU&#xff09;是一种核苷类化合物&#xff0c;它含有叠氮基团&#xff0c;这种结构特点使其在细胞学和生物学领域得到了广泛应用。与胸腺嘧啶核苷相似的结构&#xff0c;使得叠氮甲基dU&#xff08;AmdU&#xff09;能够被细胞聚…

Matlab论文插图绘制模板第118期—进阶气泡图

之前的文章中&#xff0c;分享过Matlab气泡图的绘制模板&#xff1a; 图虽说好看&#xff0c;但有一个缺点&#xff1a;需要手动调节两个图例的位置。 为了解决这一问题&#xff0c;我们不妨结合前段时间分享的紧凑排列多子图的绘制模板&#xff1a; 从而达到自动对齐排列的效…

非线性权重纵横交叉t分布改进麻雀算法

目录 1 横向交叉操作 2 纵向交叉操作 3 非线性惯性权重 4 基于t分布变异 5 实验结果 1 横向交叉操作 横向交叉操作类似于遗传算法中的交叉操作&#xff0c;是在不同 种群的相同维度中进行交叉运算。针对麻雀搜索算法全局 搜索能力不强的问题&#xff0c;本文应用横向交叉策…

Vue3.0第一天

为方便Vue调试&#xff0c;F12看对象和变量信息&#xff0c;请先安装Edge浏览器&#xff0c;和谷歌浏览器的调试插件 打开Vue官网&#xff1a;https://cn.vuejs.org/ 然后在顶层找到 生态系统->工具链指南->浏览器开发着插件 在里面下载安装插件&#xff1a;Vue.js d…

【内网穿透】金蝶云星空企业版v8.0 如何实现外网远程访问办公?

文章目录 前言1. 金蝶云星空企业版v8.0安装下载1.1 登录金蝶官网下载安装包1.2 常见的安装下载问题 2. 金蝶云星空配置SQL Sever数据库2.1 创建数据管理中心2.2 创建完成后在服务器登录管理站点 3. 下载安装注册cpolar3.1 公网访问测试 4. 固定连接公网地址 前言 金蝶云星空专注…

Mac电脑配置Tomcat

目录 1、Tomcat介绍2、Tomcat下载3、启动Tomcat4、验证Tomcat是否启动成功5、Tomcat服务关闭 1、Tomcat介绍 Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人共同开…

关于flink重新提交任务,重复消费kafka的坑

异常现象1 按照以下方式设置backend目录和checkpoint目录&#xff0c;fsbackend目录有数据&#xff0c;checkpoint目录没数据 env.getCheckpointConfig().setCheckpointStorage(PropUtils.getValueStr(Constant.ENV_FLINK_CHECKPOINT_PATH)); env.setStateBackend(new FsStat…

漏洞复现--泛微E-Office前台文件读取漏洞

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

Matplotlib绘图基础详细教程

1、GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图高级培训班 2、全流程R语言Meta分析核心技术 3、最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法 导入模块 import matplotlib as mpl import matplotlib.pyplot…

云架构师学习------云存储白皮书深入理解

云架构师学习------云存储白皮书深入理解 云架构师学习------云存储白皮书深入理解行业描述数字经济时代的到来1、基础设施的云化2、核心技术互联网化3、应用数据化和智能化 存储行业的变革1、存储服务网络的巨变2、云原生对云存储的新要求3、智能与存储的交相辉映 技术产品&am…