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

算法通过村第8关【青铜】| 二叉树的经典算法题

二叉树的双指针

1.相同的树

思路:递归的挨个比较是否相同

class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if((p == null&&q!=null) || (p != null && q == null) || (p!=null&&q!=null&&p.val != q.val)){return false;}if(p == q && p == null){return true;}boolean left = isSameTree(p.left,q.left);boolean right = isSameTree(p.right,q.right);return left&&right;}}

 2.对称二叉树

思路:分别判断左边对称和右边对称即可

class Solution {public boolean isSymmetric(TreeNode root) {return trace(root.left,root.right);}public boolean trace(TreeNode left,TreeNode right) {if(left == null && right!=null){return false;}if(left != null && right==null){return false;}if(left == right){return true;}if(left.val != right.val){return false;}boolean l = trace(left.left,right.right);boolean r = trace(left.right,right.left);return l&&r;}}

 3.合并二叉树

思路:递归三部曲

第一步:确定参数和返回值

显而易见,本题需要同步遍历两颗二叉树,TreeNode trace(TreeNode root1, TreeNode root2)

第二步:确定结束条件

当遇到root2为空或者root1为空就不需要再向下递归找相加了

第三步:确定单层逻辑

当root1和root2不为空,则两值相加

 当root2为空,直接返回root1

当root1为空,直接返回root2

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {return trace(root1,root2);}public TreeNode trace(TreeNode root1, TreeNode root2) {if(root2 == null){return root1;}if(root1 != null && root2!=null){root1.val = root1.val + root2.val;}if(root1 == null && root2!= null){return root2;}root1.left = trace(root1.left,root2.left);root1.right = trace(root1.right,root2.right);return root1;}}

路径专题

1.二叉树的所有路径

思路:

第一步:确定参数和返回值

题目要求从根结点到叶子结点的所有路径,只需要下一个结点和字符串记录 

void trace(TreeNode root,StringBuilder r)

第二步:确定结束条件

也就是什么时候找完一条路径,也就是什么时候找到叶子结点,也就是左右孩子都为空

第三步:确定单层逻辑

保存路径上的结点

class Solution { List<String> res = new LinkedList<>();public List<String> binaryTreePaths(TreeNode root) {String r = "";trace(root,r);return res;}public void trace(TreeNode root,String r){if(root == null){return;}r = r + root.val;     if(root.left == null && root.right == null){res.add(r);return;}r = r+"->";trace(root.left,r);trace(root.right,r);}
}

2.路径总和

思路:递归三部曲

第一步:确定参数和返回值

题目要求找到是否有一条路径符合要求,返回boolean,需要参数记录路径之和还有目标值

boolean hasPathSum(TreeNode root,int res,int targetSum)

 第二步:确定终止条件

当找到一条路径就结束

第三步:确定单层逻辑

当前路径求和

class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {int res = 0;return hasPathSum(root,res,targetSum);}public boolean hasPathSum(TreeNode root,int res,int targetSum){if(root == null){return false;}res += root.val;if(root.left == null && root.right == null){if(res == targetSum){return true;}return false;}boolean left = hasPathSum(root.left,res,targetSum);boolean right = hasPathSum(root.right,res,targetSum);return left || right;}
}

翻转

思路:递归三部曲

第一步: 确定参数和返回值

翻转二叉树需要两两交换左右结点,遍历每一个结点进行交换即可。即参数root返回void

第二步:确定结束条件

结点为空

第三步:确定单层逻辑

每一个结点交换左右子树

class Solution {public TreeNode invertTree(TreeNode root) {trace(root);return root;}public void trace(TreeNode root){if(root == null){return;}TreeNode t = root.left;root.left = root.right;root.right = t;trace(root.left);trace(root.right);}
}

相关文章:

算法通过村第8关【青铜】| 二叉树的经典算法题

二叉树的双指针 1.相同的树 思路&#xff1a;递归的挨个比较是否相同 class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if((p null&&q!null) || (p ! null && q null) || (p!null&&q!null&&p.val ! q.val)){return f…...

Open3D 点云均值滤波

目录 一、算法原理1、均值滤波2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、均值滤波 对待处理的当前采样点,选择一个模板,该模板由其邻近的若干个数据点组成,…...

C语言指针入门详解

一、指针简介 指针(Pointer)是C语言的一个重要知识点&#xff0c;其使用灵活、功能强大&#xff0c;是C语言的灵魂指针与底层硬件联系紧密&#xff0c;使用指针可操作数据的地址&#xff0c;实现数据的间接访问指针就是地址&#xff0c;通过访问此地址来获取该地址存储的数据 …...

软件工程(十四) 设计模式之结构型模式(二)

1、组合模式 简要说明 将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 速记关键字 树形目录结构 类图如下 由类图其实可以看出,组合模式就是将具有父子关系的结构,组装形成一棵树,并且根据规范,树干节点和叶子节…...

不解压的方式直接更新jar包内部的内容

前言 如果线上直接更新一个class&#xff0c;可以不用解压&#xff0c;直接利用jar命令直接更新jar报的资源和内容 更新jar包内容文件 Jar 工具提供了一个 u 选项&#xff0c;你可以通过修改其清单或添加文件来更新现有 JAR 文件的内容。 添加文件的基本命令具有以下格式&am…...

软件工程(八) UML之类图与对象图

1、类图与对象图 1.1、类图与对象图的概念 类图(class diagram)描述一组类、接口、协作和它们之间的关系 对象图(object diagram)描述一组对象及它们之间的关系、对象图描述了在类图中所建立的事物实例的静态快照。 1.2、类图与对象图的区别 类图和对象图基本上是一样…...

【Unity3D赛车游戏】【五】Unity中汽车加速效果是如何优化的?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

龙智案例:某大型零售企业如何打造高速、现代化的ITSM体系

在2023 DevOps国际峰会北京站的现场&#xff0c;我们对话了龙智咨询顾问胡若愚&#xff0c;他为我们奖助了一位零售业的大型客户是如何在数字化浪潮中&#xff0c;凭借龙智提供的Jira Service Management产品及服务&#xff0c;打造现代化ITSM平台&#xff0c;提升客户满意度。…...

jdk 03.stream

01.集合处理数据的弊端 当我们在需要对集合中的元素进行操作的时候&#xff0c;除了必需的添加&#xff0c;删除&#xff0c;获取外&#xff0c;最典型的操作就是集合遍历 package com.bobo.jdk.stream; import java.util.ArrayList; import java.util.Arrays; import java.ut…...

“华为杯”研究生数学建模竞赛2018年-【华为杯】C题:对恐怖袭击事件记录数据的量化分析

目录 摘 要: 一、 问题背景与重述 1.1 问题背景 1.2 问题重述 二、 问题分析...

java8的reduce方法

在 Java 8 中&#xff0c;reduce 是一个流操作方法&#xff0c;用于将流中的元素按照指定的操作进行归约&#xff08;reduce&#xff09;操作&#xff0c;最终得到一个结果。 reduce 方法有三种重载形式&#xff1a; T reduce(T identity, BinaryOperator<T> accumulato…...

Mac发现有的软件不能上网的破解之法

1、Mac上打开终端 terminal &#xff0c;获取 root 权限。 sudo -i 2、编辑 hosts 文件 vim /private/etc/hosts 3、找到被禁止软件的数据请求域名&#xff0c;然后删除相关行&#xff0c;快捷件dd&#xff0c;然后:wq保存退出 比如百度 127.0.0.1 pan.baidu.com ##sec 印…...

定时检测接口是否正常飞书告警脚本

第一版 支持多个接口地址,循环检测,定时每分钟执行一次脚本 告警效果 脚本 飞书机器人创建忽略跳过,各大协作平台大同小异拿出机器人hook地址 #!/bin/bash URL_LIST=(https://gatewaxxxxxxxxxxxxxxxxxx https://sandbox-gatexxxxxxxxxxxxxxxxxx)for URL in ${URL_LIST[*...

【MySQL】2、MySQL数据库的管理

常用 describe user; Field:字段名称 Type:数据类型 Null :是否允许为空 Key :主键 Type:数据类型 Null :是否允许为空key :主键 Default :默认值 Extra :扩展属性&#xff0c;例如:标志符列&#xff08;标识了种子&#xff0c;增量/步长&#xff09;1 2 id&#xff1a;1 3 5 …...

8086汇编test指令学习

Test指令将两个操作数进行逻辑与运算&#xff0c;并根据运算结果设置相关的标志位。Test的两个操作数不会被改变。运算结果在设置过相关标记位后会被丢弃。 TEST AX,BX 与 AND AX,BX 命令有相同效果&#xff0c;只是Test指令不改变AX和BX的内容&#xff0c;而AND指令会把结果保…...

简单js逆向案例(2)

文章目录 前文分析完整代码结尾 前文 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 分析 目标网址 aHR0cHM6Ly9zZWFyY2guYmlkY2VudGV…...

azure data studio SQL扩展插件开发笔记

node.js环境下拉取脚手架 npm install -g yo generator-azuredatastudio yo azuredatastudio 改代码 运行 调试扩展&#xff0c;在visual studio code中安装插件即可 然后visual studio code打开进行修改运行即可 image.png 运行后自动打开auzre data studio了&#xff0c; 下面…...

【二分】搜索旋转数组

文章目录 不重复数组找最小值&#xff0c;返回下标重复数组找最小值&#xff0c;返回下标不重复数组找target&#xff0c;返回下标重复数组找target&#xff0c;返回bool重复数组找target&#xff0c;返回下标 不重复数组找最小值&#xff0c;返回下标 class Solution {public …...

APSIM模型应用与参数优化、批量模拟

APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生长模拟模型之一。APSIM模型有Classic和Next Generation两个系列模型&#xff0c;能模拟几十种农作物、牧草和树木的土壤-植物-大气过程&#xff0c;被广泛应用于精细农业、水肥管理、气候变化、粮食安…...

QT使用QXlsx实现对Excel sheet的相关操作 QT基础入门【Excel的操作】

准备:搭建环境引用头文件QT中使用QtXlsx库的三种方法 QT基础入门【Excel的操作】_吻等离子的博客-CSDN博客 #include "xlsxdocument.h"QTXLSX_USE_NAMESPACE // 添加Xlsx命名空间(https://github.com/dbzhang800/QtXlsxWriter) or QXLSX_USE_NAMESPACE // 添加Xl…...

ARM DIY(四)WiFi 调试

文章目录 焊接打开内核编译选项重新编译内核烧录 && 运行 && 测试完善脚本测速手搓天线正式天线 焊接 换个粗点的风枪嘴&#xff0c;让热风覆盖 RTL8823BS 整体模块&#xff0c;最终实现自动归位 焊接 SDIO 接口的上拉电阻以及复位引脚上拉电阻 硬件部分就这…...

AIGC ChatGPT 实现动态多维度分析雷达图制作

雷达图在多维度分析中是一种非常实用的可视化工具&#xff0c;主要有以下优势&#xff1a; 易于理解&#xff1a;雷达图使用多边形或者圆形的形式展示多维度的数据&#xff0c;直观易于理解。多维度对比&#xff1a;雷达图可以在同一张图上比较多个项目或者实体在多个维度上的…...

Vue2向Vue3过度核心技术路由

目录 1 路由介绍1.思考2.路由的介绍3.总结 2 路由的基本使用1.目标2.作用3.说明4.官网5.VueRouter的使用&#xff08;52&#xff09;6.代码示例7.两个核心步骤8.总结 3 组件的存放目录问题1.组件分类2.存放目录3.总结 4 路由的封装抽离5 Vue路由-重定向1.问题2.解决方案3.语法4…...

ElasticSearch常用方法

ElasticSearch:是一个储存、检索、数据分析引擎。 在互联网项目中我们经常会按一定的条件去索引我们指定的数据&#xff0c;但是在大量的数据中我们如果直接查询数据库效率是非常低的&#xff0c;ElasticSearch就可以很好的帮我们完成检索。 es封装了api提供给我我们直接操作…...

nginx下添加http_ssl_module并且配置域名,指定端口

1.切换到源码包&#xff1a; cd /home/nginx-1.23.1 2.进行编译&#xff1a; ./configure --prefix/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module 3.配置完成后&#xff0c;运行命令&#xff1a; make make命令执行后&#xff0c;不要进行mak…...

【PHP】PHP变量

1、变量介绍 PHP 是一门弱类型语言&#xff0c;不必向 PHP 声明该变量的数据类型。PHP 会根据变量的值&#xff0c;自动把变量转换为正确的数据类型。在强类型的编程语言中&#xff0c;必须在使用变量前先声明&#xff08;定义&#xff09;变量的类型和名称。 <?php $x5;…...

KVM创建虚拟机可访问外网+可使用Xshell等工具连接

创建虚拟机时使用桥接网络模块即可&#xff0c;如下&#xff1a; 1、创建一个存储卷(虚拟机的磁盘) 2、创建虚拟机时选择网络 3、系统安装完成后配置固定IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOTyes BOOTPROTOstatic IPADDR16.32.15.60 GATEWAY16.32.15.2…...

数据库——Redis 没有使用多线程?为什么不使用多线程?

文章目录 Redis6.0 之后为何引入了多线程&#xff1f; 虽然说 Redis 是单线程模型&#xff0c;但是&#xff0c; 实际上&#xff0c;Redis 在 4.0 之后的版本中就已经加入了对多线程的支持。 不过&#xff0c;Redis 4.0 增加的多线程主要是针对一些大键值对的删除操作的命令&a…...

Node.JS教程

文章目录 Node.JSNode.js学习指南一、Node.js基础1.认识Node.js2.开发环境搭建3. 模块、包、commonJS3.1、为什么要有模块化开发&#xff1f;3.2、CommonJS规范3.3、 modules模块化规范写法 4.Npm&Yarn4.1、npm使用4.2、全局安装nrm4.3、yarn使用 持续更新中总结 Node.JS N…...

mysql表锁死怎么办?事务锁sql超时被锁死怎么办?

不要慌&#xff01;不要慌&#xff01;两句命令教你做人 一、mysql表锁死 1、查询所有进程&#xff1a; SHOW PROCESSLIST; 2、找到进程号kill掉 kill 3269987 2、事务锁 sql超时被锁死 1、查询所有执行中的sql select t.*,to_seconds(now())-to_seconds(t.trx_started) id…...