当前位置: 首页 > news >正文

相同的树[简单]

优质博文:IT-BLOG-CN

在这里插入图片描述

一、题目

给你两棵二叉树的根节点pq,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

两棵树上的节点数目都在范围[0, 100]
-104 <= Node.val <= 104

二、代码

【1】深度优先搜索: 如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。这是一个递归的过程,因此可以使用深度优先搜索,递归地判断两个二叉树是否相同。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {// 思想:递归遍历if (p == null && q == null) {return true;} else if (p == null || q == null) {return false;} else if (p.val == q.val) {return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}return false;}
}

时间复杂度: O(min⁡(m,n))其中mn分别是两个二叉树的节点数。对两个二叉树同时进行深度优先搜索,只有当两个二叉树中的对应节点都不为空时才会访问到该节点,因此被访问到的节点数不会超过较小的二叉树的节点数。
**空间复杂度:O(min⁡(m,n))其中mn分别是两个二叉树的节点数。空间复杂度取决于递归调用的层数,递归调用的层数不会超过较小的二叉树的最大高度,最坏情况下,二叉树的高度等于节点数。

【2】广度优先搜索: 可以通过广度优先搜索判断两个二叉树是否相同。首先判断两个二叉树是否为空,如果两个二叉树都不为空,则从两个二叉树的根节点开始广度优先搜索。使用两个队列分别存储两个二叉树的节点。初始时将两个二叉树的根节点分别加入两个队列。每次从两个队列各取出一个节点,进行如下比较操作。
  ■ 比较两个节点的值,如果两个节点的值不相同则两个二叉树一定不同;
  ■ 如果两个节点的值相同,则判断两个节点的子节点是否为空,如果只有一个节点的左子节点为空,或者只有一个节点的右子节点为空,则两个二叉树的结构不同,因此两个二叉树一定不同;
  ■ 如果两个节点的子节点的结构相同,则将两个节点的非空子节点分别加入两个队列,子节点加入队列时需要注意顺序,如果左右子节点都不为空,则先加入左子节点,后加入右子节点。

如果搜索结束时两个队列同时为空,则两个二叉树相同。如果只有一个队列为空,则两个二叉树的结构不同,因此两个二叉树不同。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {// 广度优先:需要两个队列:LinkedListif (p == null && q == null) {return true;} else if (p == null || q == null) {return false;}Queue<TreeNode> m = new LinkedList<TreeNode>();  // 存放 p 节点Queue<TreeNode> n = new LinkedList<TreeNode>();  // 存放 q 节点m.offer(p);n.offer(q);while(!m.isEmpty() && !n.isEmpty()) {TreeNode node1 = m.poll();TreeNode node2 = n.poll();// 不同返回 false,相同还需要看左右节点if (node1.val != node2.val) {return false;}// 获取平铺列表TreeNode left1 = node1.left;TreeNode right1 = node1.right;TreeNode left2 = node2.left;TreeNode right2 = node2.right;if (left1 == null ^ left2 == null) {return false;}if (right1 == null ^ right2 == null) {return false;}if (left1 != null) {m.offer(left1);}if (right1 != null) {m.offer(right1);}if (left2 != null) {n.offer(left2);}if (right2 != null) {n.offer(right2);}} return m.isEmpty() && n.isEmpty();}
}

时间复杂度: O(min⁡(m,n))其中mn分别是两个二叉树的节点数。对两个二叉树同时进行广度优先搜索,只有当两个二叉树中的对应节点都不为空时才会访问到该节点,因此被访问到的节点数不会超过较小的二叉树的节点数。
空间复杂度: O(min⁡(m,n))其中mn分别是两个二叉树的节点数。空间复杂度取决于队列中的元素个数,队列中的元素个数不会超过较小的二叉树的节点数。

相关文章:

相同的树[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你两棵二叉树的根节点p和q&#xff0c;编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,…...

02-Web应用_架构构建_漏洞_HTTP数据包_代理服务器

Web应用_架构构建_漏洞_HTTP数据包_代理服务器 一、网站搭建前置知识1.1 域名1.2、子域名1.3、DNS二、web应用环境架构类三、web应用安全漏洞分类四、web请求返回过程数据包 五、演示案例5.1、架构-Web应用搭建-域名源码解析5.2、请求包-新闻回帖点赞-重放数据包5.3、请求包-移…...

使用flink-cdc-sqlserver出现错误,需要批量开启sqlserver表cdc模式,监听表变化

docker安装 docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORDZcyc123456" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2017-latest开启库cdc模式 选择你自己的数据库&#xff0c;执行以下sql语句 EXEC sys.sp_cdc_enable_db…...

ffmpeg的使用,安装,抽帧,加水印,截图,生成gif,格式转换,抓屏等

实际使用中总结的关于ffmpeg对视频的处理的记录文档 具体信息&#xff1a; http://ffmpeg.org/download.html 官网下载ffmpeg 关于ffmpeg的安装详细步骤和说明 装ffmpeg 方式,Linux和windows下的 http://bbs.csdn.net/topics/390519382 php 调用ffmpeg , http://bbs.csdn.net/t…...

游戏视频录制软件推荐,打造专业电竞视频(3款)

随着游戏产业的快速发展&#xff0c;越来越多的玩家开始关注游戏视频录制软件。一款好的录制软件不仅可以帮助玩家记录游戏中的精彩瞬间&#xff0c;还可以让其与他人分享自己的游戏体验。接下来&#xff0c;我们将介绍三款热门的游戏视频录制软件&#xff0c;并对其进行详细的…...

两种方式实现文本超出指定行数显示展开收起...

需要实现这样一个功能 默认高度下文本超出隐藏&#xff0c;点击展开可查看所有内容&#xff0c;点击收起可折叠 方法一&#xff1a;通过html和css实现 代码部分 html:<div className"expand-fold"><input id"check-box" type"checkbox&qu…...

Docker进阶篇-Docker网络

一、描述 1、docker不启动&#xff0c;默认网络情况 查看网卡情况使用&#xff0c;ifconfig或者ip addr ens33&#xff1a;本机网卡 lo&#xff1a;本机回环网络网卡 virbr0:在CentoS 7的安装过程中如果有选择相关虚拟化的的服务安装系统后&#xff0c;启动网卡时会发现 …...

用两个队列实现栈

这里写目录标题 用两个队列实现栈题目描述思路&#xff1a;结构逻辑图如下完整解析代码 用两个队列实现栈 leetcode 题目描述 思路&#xff1a; 准备两个队列&#xff0c;第一个队列依次出队到只剩一个数据时停止&#xff0c;将已出队的数据依次入队到第二个队列&#xff0c;…...

【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐年平均气温数据、逐年最高气温数据…...

Windows11安装运行Linux(Ubuntu)

一、安装windows支持 输入windows打开界面 选择虚拟机监控程序平台、适用于linux的子系统、虚拟机平台 在 Windows 系统中&#xff0c;"虚拟机平台"和"虚拟机监控程序平台"是两个与虚拟化相关的功能&#xff0c;但它们各自有着不同的作用和用途。 虚拟机…...

钉钉群机器人-发送群消息

1、钉钉群创建机器人 添加完成后&#xff0c;要记住 Webhook 路径&#xff1b; 2、机器人接入文档网址 自定义机器人接入 - 钉钉开放平台 3、JAVA代码 import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.re…...

OceanBase 4.2.2 GA 发布,全新特性快速预览!

在 2023 年度发布会上&#xff0c;OceanBase 沿着“一体化”产品战略思路&#xff0c;发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的首个 LTS 版本&#xff0c;该版本的定位是支撑客户关键业务稳定长久运行&#xff0c;我们非常认真的打磨了这个版本&#…...

IP代理類型詳解 | 基於網路協議、匿名性、IP來源

線上代理、HTTP代理、Socks4/5代理、動態住宅IP代理、專用代理、共用代理、開放代理、匿名代理、反向代理……是否令你感到困惑&#xff1f;閱讀本片文章瞭解所有。可以將代理視為你與所需網站Web伺服器之間的中間人。它接收你的請求&#xff0c;然後將請求發送到Web伺服器。然…...

uniapp中使用EelementPlus

uniapp的强大是非常震撼的&#xff0c;一套代码可以编写到十几个平台。这个可以在官网上进行查询uni-app官网。主要还是开发小型的软件系统&#xff0c;使用起来非常的方便、快捷、高效。 uniapp中有很多自带的UI&#xff0c;在创建项目的时候&#xff0c;就可以自由选择。而E…...

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注&#xff1a;数据库配置比较重要 先将本地的Docker启动起来&#xff0c;用Docker管理数据库 将项目自己创建的Todo相关的都删掉…...

QT自用,勿点

自己有接近2年的前端经验&#xff08;html,js,jq,vue之类的&#xff09;&#xff0c;但是一直对QT不是很熟悉&#xff0c;之前零散的学了一些&#xff0c;但是平时不怎么做界面&#xff0c;这几天系统的学一下。 1.7 创建第一个Qt项目_哔哩哔哩_bilibili 文档: *Qt中的信号槽…...

计组学习笔记2024/2/5

记录每天学到了什么,同时在挪移图片过程中再次理解加深印象 学计算机最重要的是理解,而不是整齐的笔记,不要主次搞混,所以以后记笔记的模式也要改一下(主要还是自己太菜,还达不到一边做到整齐笔记的同时还能够有时间做到理解,所以只能舍弃整齐时间保留理解时间)(不过如果有现成…...

Redis(三)(实战篇)

查漏补缺 1.spring 事务失效 有时候我们需要在某个 Service 类的某个方法中&#xff0c;调用另外一个事务方法&#xff0c;比如&#xff1a; Service public class UserService {Autowiredprivate UserMapper userMapper;public void add(UserModel userModel) {userMapper.…...

MacOS系统电脑远程桌面控制windows系统电脑【内网穿透】

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1. 测试本地局域网内远程控制1.1 Windows打开远程桌面1…...

Verilog实现2进制码与BCD码的互相转换

1、什么是BCD码&#xff1f; BCD码是一种2进制的数字编码形式&#xff0c;用4位2进制数来表示1位10进制中的0~9这10个数。这种编码技术&#xff0c;最常用于会计系统的设计里&#xff0c;因为会计制度经常需要对很长的数字做准确的计算。相对于一般的浮点式记数法&#xff0c;…...

一次慢改表引发的线上死锁事故复盘

一次慢改表引发的线上死锁事故复盘 一、事故背景 在一次常规的数据库表结构变更过程中&#xff0c;对某核心业务表执行了慢改表操作&#xff08;使用 pt-online-schema-change&#xff09;。操作开始后&#xff0c;短时间内触发报警&#xff1a; 部分接口响应时间显著上升出现请…...

【帮宝抑菌膏】宝宝额头起红疹子怎么办?宝妈必看的原因与护理指南

宝宝额头突然冒出一片片红疹子&#xff0c;不仅让宝宝难受哭闹&#xff0c;更让新手父母揪心不已。作为深耕母婴护理领域十余年的专业品牌&#xff0c;帮宝凭借丰富的育儿指导经验和科学护理方案&#xff0c;为宝妈们提供全方位的解决方案。当发现宝宝额头起红疹子时&#xff0…...

Clawdbot 是如何实现永久记忆的?

下文是如何构建的在深入探讨记忆之前&#xff0c;我们先来理解模型在每次请求时能看到什么&#xff1a;[0] 系统提示词&#xff08;静态指令 条件指令&#xff09; [1] 项目上下文&#xff08;引导文件&#xff1a;AGENTS.md、SOUL.md 等&#xff09; [2] 对话历史&#xff08…...

明天武汉!用好“龙虾”的关键要素全在这儿

...

从电商搜索到内容审核:微调后的Chinese-CLIP模型还能这么用?

从电商搜索到内容审核&#xff1a;微调后的Chinese-CLIP模型还能这么用&#xff1f; 当电商平台每天新增数百万商品时&#xff0c;如何快速识别违规商品图片&#xff1f;当社交媒体需要审核海量用户上传的图文内容时&#xff0c;如何高效判断图文匹配度&#xff1f;这些看似不同…...

机器人学前沿技术探索:robotics-coursework项目高级应用指南

机器人学前沿技术探索&#xff1a;robotics-coursework项目高级应用指南 【免费下载链接】robotics-coursework &#x1f916; Places where you can learn robotics (and stuff like that) online &#x1f916; 项目地址: https://gitcode.com/gh_mirrors/ro/robotics-cour…...

新手福音:在快马平台上手accelerate,轻松理解分布式训练基础

新手福音&#xff1a;在快马平台上手accelerate&#xff0c;轻松理解分布式训练基础 作为一个刚接触深度学习的新手&#xff0c;分布式训练听起来总是让人望而生畏。各种复杂的配置、环境搭建和代码修改&#xff0c;常常让人在入门阶段就打了退堂鼓。直到我发现了accelerate库…...

HY-Motion 1.0实际效果:关节角度误差<3°、帧间抖动降低50%实测

HY-Motion 1.0实际效果&#xff1a;关节角度误差<3、帧间抖动降低50%实测 1. 效果惊艳的开场 如果你正在寻找一个能够真正理解文字描述并生成高质量3D动作的AI工具&#xff0c;HY-Motion 1.0的表现可能会让你惊喜。经过我们的实际测试&#xff0c;这个基于十亿参数的大模型…...

AI赋能浏览器:通过快马平台生成智能扩展,实现网页内容自动总结与代码智能解释

最近在做一个很有意思的尝试&#xff1a;用AI给浏览器装上"智能大脑"。具体来说&#xff0c;是开发一个谷歌浏览器扩展&#xff0c;能够智能分析网页内容。这个扩展最酷的地方在于&#xff0c;它能自动识别你选中的是普通文本还是代码&#xff0c;然后分别给出摘要总…...

4大核心革新:PCL-CE打造高效Minecraft启动体验

4大核心革新&#xff1a;PCL-CE打造高效Minecraft启动体验 PCL-CE作为社区驱动的Minecraft启动器增强版&#xff0c;整合了多维度管理功能&#xff0c;为玩家提供从环境配置到性能优化的全流程解决方案。本文将通过"问题-方案-验证"框架&#xff0c;带您探索如何利用…...