代码学习记录13

随想录日记part13

t i m e : time: time 2024.03.06



主要内容:今天的主要内容是二叉树的第二部分哦,主要有层序遍历;翻转二叉树;对称二叉树。

  • 102.二叉树的层序遍历
  • 226.翻转二叉树
  • 101. 对称二叉树


Topic1二叉树的层序遍历

题目: 给你二叉树的根节点 r o o t root root ,返回其节点值的层序遍历。 (即逐层地,从左到右访问所有节点)。

示例:
请添加图片描述
输入: r o o t = [ 3 , 9 , 20 , n u l l , n u l l , 15 , 7 ] root = [3,9,20,null,null,15,7] root=[3,9,20,null,null,15,7]
输出: [ [ 3 ] , [ 9 , 20 ] , [ 15 , 7 ] ] [[3],[9,20],[15,7]] [[3],[9,20],[15,7]]

**思路:**层序遍历是一层一层去遍历二叉树,符合先进先出的规则,即图论中的广度优先遍历思路,所以这道题目我们需要辅助的队列来实现层序遍历。其遍历的动画可以观看下面的动画:
请添加图片描述
下面给出两种层序遍历的写法:

class Solution {// 定义一个记录组后输出的数组public List<List<Integer>> resList = new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {//levelOrder_queue(root);levelOrder_queue_pro(root,0);return resList;}// 使用栈辅助进行层次遍历private void levelOrder_queue(TreeNode root) {if (root == null)return;// 创建辅助队列Queue<TreeNode> q = new LinkedList<TreeNode>();q.offer(root);while (!q.isEmpty()) {List<Integer> tem = new ArrayList<Integer>();int length = q.size();while (length > 0) {TreeNode t = q.poll();tem.add(t.val);if (t.left != null)q.offer(t.left);if (t.right != null)q.offer(t.right);length--;}resList.add(tem);}}//使用递归的方法private void levelOrder_queue_pro(TreeNode root,int deep){if(root==null) return;deep++;if(resList.size()<deep){//当层级增加时,list的Item也增加,利用list的索引值进行层级界定List<Integer> tem = new ArrayList<Integer>();resList.add(tem);}resList.get(deep-1).add(root.val);levelOrder_queue_pro(root.left,deep);levelOrder_queue_pro(root.right,deep);}
}

上面的两种写法务必要记住。



Topic2翻转二叉树

**题目:**给你一棵二叉树的根节点 r o o t root root ,翻转这棵二叉树,并返回其根节点。
示例:请添加图片描述
输入: r o o t = [ 4 , 2 , 7 , 1 , 3 , 6 , 9 ] root = [4,2,7,1,3,6,9] root=[4,2,7,1,3,6,9]
输出: [ 4 , 7 , 2 , 9 , 6 , 3 , 1 ] [4,7,2,9,6,3,1] [4,7,2,9,6,3,1]

**思路:**整个树的翻转主要有两种思路:

  • 递归
  • 迭代
  • 递归法:写好递归是要有三个关键点注意的:
    1.确定参数和返回值
TreeNode transTree(TreeNode root);

2.确定中止条件

 if(root==null)return null;

3.确定单层递归逻辑
我的代码是前序遍历,先反转左右子树,然后进行交换左右孩子节点

		TreeNode b=transTree(root.right);TreeNode a=transTree(root.left);tem.left=b;tem.right=a;

完整的 j a v a java java 代码如下:

class Solution {public TreeNode invertTree(TreeNode root) {return transTree(root);}private TreeNode transTree(TreeNode root) {TreeNode tem = root;if (tem == null)return null;TreeNode b = transTree(root.right);TreeNode a = transTree(root.left);tem.left = b;tem.right = a;return root;}
}

  • 迭代法:能够使用递归的方法都能使用栈来实现:
    如下面代码实现:
class Solution {public TreeNode invertTree(TreeNode root) {if(root==null)return root;//建立栈Stack<TreeNode> stack=new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode tem=stack.pop();transpoint(tem);if(tem.right!=null)stack.push(tem.right);if(tem.left!=null)stack.push(tem.left);}return root;}private void transpoint(TreeNode root){if(root==null)return;else{TreeNode t=root.left;root.left=root.right;root.right=t;}}
}


Topic3对称二叉树

**题目:**给你一个二叉树的根节点 r o o t root root , 检查它是否轴对称。
示例:
请添加图片描述
输入: r o o t = [ 1 , 2 , 2 , 3 , 4 , 4 , 3 ] root = [1,2,2,3,4,4,3] root=[1,2,2,3,4,4,3]
输出: t r u e true true

思路:
后序遍历的递归法以及迭代法

递归法:

class Solution {// 递归法public boolean isSymmetric(TreeNode root) {if (root == null)return true;elsereturn isSame(root.left, root.right);}private boolean isSame(TreeNode left, TreeNode right) {if (left == null && right != null)return false;else if (left != null && right == null)return false;else if (left == null && right == null)return true;else {boolean a = isSame(left.left, right.right);boolean b = isSame(left.right, right.left);return (a && b);}}
}

迭代法:
请添加图片描述
代码实现如下:

class Solution {// 使用队列辅助实现的迭代法public boolean isSymmetric(TreeNode root) {if (root == null)return true;Deque<TreeNode> queue = new LinkedList<>();queue.offerFirst(root.left);// 将左子树头节点压入queue.offerLast(root.right);// 将右子树头节点压入while (!queue.isEmpty()) {TreeNode left = queue.pollFirst();TreeNode right = queue.pollLast();if (left == null && right == null)continue;if (left == null || right == null || left.val != right.val)return false;queue.offerFirst(left.left);queue.offerLast(right.right);queue.offerFirst(left.right);queue.offerLast(right.left);}return true;}
}

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

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

相关文章

MySQL用户创建和权限分配

MySQL用户创建和权限分配 用户创建 查看用户 select user,host from user; 创建用户 create user ‘用户名’ ‘host’ identified by 密码’; 删除用户 drop user ‘用户名’ ‘host’; 更新host update user set host ‘%’ where user 用户名‘&#xff1b; 权限分配 查…

逢7过,从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过(1~100之间满足逢7必过规则的数据)

分析&#xff1a;这题就是碰到 7是个位&#xff0c;7是十位&#xff0c;7的倍数 就要过 // 1 2 3 4 5 6 过 8 9 10 11 12 13 过 14 15 16 过 18 19 20 过。。 69 过 过 过 过 过 。。80.。。 判断每个数字&#xff0c;如果符合条件&#xff0c;就打印过&#xff0c;如果不符…

2024中国重庆沐浴博览会5月29日-31日

2024中国沐浴展——世界级温泉胜地&#xff0c;引领健康产业新风向 2024第五届中国沐浴健康产业&#xff08;重庆&#xff09;博览会暨第十一届中国沐浴温泉文化节 ——世界级温泉胜地&#xff0c;引领健康产业新风向 随着人们生活水平的提高和健康意识的增强&#xff0c;沐…

LeetCode-第67题-二进制求和

1.题目描述 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 2.样例描述 3.思路描述 将两个二进制字符串转换成整型&#xff0c;然后相加后的整型转为二进制字符串 4.代码展示 class Solution(object):def addBinary(self, a, b):# 将字符串…

AI新工具(20240306) mlx-swift-chat Mac运行本地模型;Comflowyspace开源AI图像和视频生成工具

1: mlx-swift-chat 专为 Apple 硅片设计的高效机器学习框架&#xff0c;支持在本地实时运行 LLM 模型&#xff08;如 Llama、Mistral&#xff09; mlx-swift-chat 是一个为苹果系统&#xff08;例如你的笔记本电脑上的Apple Silicon&#xff09;特别设计的机器学习框架 MLX 的…

计划任务和日志

一、计划任务 计划任务概念解析 在Linux操作系统中&#xff0c;除了用户即时执行的命令操作以外&#xff0c;还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务&#xff08;如定期备份、定期采集监测数据&#xff09;。RHEL6系统中默认已安装了at、crontab软件…

前端如何实现高度的自动过渡

主要是利用了浏览器的渲染机制。 <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, mini…

linux系统elk组件kibana部署

Kibana部署 Kibana部署安装配置Kibana安装配置启动 安装配置Nginx反向代理配置YUM源&#xff1a;安装&#xff1a;配置反向代理 配置授权用户和密码启动nginx Kibana部署 安装配置Kibana 安装 tar zxf kibana-7.13.2-linux-x86_64.tar.gz -C /usr/local/配置 echo server.…

扫码看图的预览效果怎么做?图片的二维码如何在线生成?

图片二维码是现在很常用的一种预览图片的方式&#xff0c;比如照片、海报、动态图、拍摄的图片等类型的内容都可以用二维码的方式在手机上预览。在制作图片二维码时候&#xff0c;现在大多会通过网上的图片二维码生成器来制作&#xff0c;直接用专业的功能&#xff0c;就可以快…

SoraAI优先体验资格注册教程

SoraA1视频工具优先体验资格申请 申请网址&#xff1a;https://openai.com/form/red-teaming-network 申请步骤&#xff1a; 填写基础信息 请使用英文根据内容填写以下内容&#xff0c;名、姓、电子邮件、居住国家、组织隶属关系(如果有)、教育水平 、学位&#xff08;哪个领…

视频推拉流EasyDSS平台直播通道重连无法转推的原因排查与解决

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 用户使用EasyDSS平台对直播通道进行转推&#xff0c;发现只要关闭…

大势智慧黄先锋:现实世界数字重建 拥抱AI 擘画自主可控的三维画卷

来源&#xff1a;中国地理信息产业协会 实景三维涉及到大面积、高精度的地理空间信息数据&#xff0c;然而早期国内99%以上的实景三维数据制作测绘单位都基于国外软件进行三维重建&#xff0c;如此重要的工作大量使用国外软件&#xff0c;如何确保国家地理空间信息的安全&#…

ONNX-TensorRT

ONNX 的 TensorRT 后端 解析 ONNX 模型以使用TensorRT执行。 另请参阅TensorRT 文档。 有关最近更改的列表&#xff0c;请参阅更改日志。 有关常见问题和疑问的列表&#xff0c;请参阅常见问题解答。 如需业务咨询&#xff0c;请联系Researchinquiriesnvidia.com 如需新闻…

JVM中CMS和G1垃圾回收器的区别

JVM&#xff08;Java虚拟机&#xff09;中的CMS&#xff08;Concurrent Mark-Sweep&#xff09;和G1&#xff08;Garbage First&#xff09;是两种用于垃圾回收的不同算法。它们都旨在减少垃圾回收对应用程序性能的影响&#xff0c;但它们的实现方式和重点略有不同。 CMS &…

音频设备的3种硬件接口- PCM,I2S和AC97

一、PCM接口 ​ ​针对不同的数字音频子系统&#xff0c;出现了几种微处理器或DSP与音频器件间用于数字转换的接口。最简单的音频接口是PCM&#xff08;脉冲编码调制&#xff09;接口&#xff0c;该接口由时钟脉冲&#xff08;BCLK&#xff09;、帧同步信号&#xff08;FS&a…

【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制

目录 1.先理清一下概念 2.锁 2.1.分类 2.2.表锁 2.3.行锁&#xff08;MVCC&#xff09; 2.4.间隙锁 2.5.行锁变表锁 2.6.强制锁行 1.先理清一下概念 所谓并发控制指的是在对数据库进行并发操作时如何保证数据的一致性和正确性。在数据库中与并发控制相关的概念有如下几…

android开发基础有哪些,985研究生入职电网6个月

不好意思久等了 这篇文章让小伙伴们久等了。 一年多以来&#xff0c;关于嵌入式开发学习路线、规划、看什么书等问题&#xff0c;被问得没有一百&#xff0c;也有大几十次了。但是无奈自己对这方面了解有限&#xff0c;所以每次都没法交代&#xff0c;搞得实在不好意思。 但…

python之十进制转化成n进制

思路&#xff1a;除以n得商取模&#xff0c;然后再用商除以n得商取模&#xff0c;依此类推&#xff0c;直到商为0&#xff0c;最后将余数逆序输出即为结果 核心代码 result "" # 结果 while x > 0:a x % n # 余数result result str(a)x x // n # 商prin…

js需要同时发起百条接口请求怎么办?--通过Promise实现分批处理接口请求

如何通过 Promise 实现百条接口请求&#xff1f; 实际项目中遇到需要批量发起上百条接口请求怎么办&#xff1f; 最新案例代码在此&#xff01;点击看看 前言 不知你项目中有没有遇到过这样的情况&#xff0c;反正我的实际工作项目中真的遇到了这种玩意&#xff0c;一个接口…

SanctuaryAI推出Phoenix: 专为工作而设计的人形通用机器人

文章目录 1. Company2. Main2.1 关于凤凰™ (Phoenix)2.2 关于碳™(Carbon)2.3 商业化部署2.4 关于 Sanctuary Corporation 3. My thoughtsReference彩蛋&#xff1a;将手机变为桌面小机器人 唯一入选《时代》杂志 2023 年最佳发明的通用机器人。 称机器人自主做家务的速度和灵…