代码学习记录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,一经查实,立即删除!

相关文章

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软件…

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

图片二维码是现在很常用的一种预览图片的方式&#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;如何确保国家地理空间信息的安全&#…

【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;搞得实在不好意思。 但…

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

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

7.使用os.Args或flag解析命令行参数

文章目录 一、os.Args二、flag包基本使用 Go语言内置的flag包实现了命令行参数的解析&#xff0c;flag包使得开发命令行工具更为简单。 一、os.Args 如果你只是简单的想要获取命令行参数&#xff0c;可以像下面的代码示例一样使用os.Args来获取命令行参数。 package mainimp…

类的生命周期

一个类完整的生命周期&#xff0c;会经历五个阶段&#xff0c;分别为&#xff1a;加载、连接、初始化、使用、和卸载。其中的连接又分为验证、准备和解析三个步骤。如下图所示 加载&#xff08;Loading&#xff09; 简单一句话概括&#xff0c;类的加载阶段就是&#xff1a;找…

【YOLO v5 v7 v8 v9小目标改进】AFPN 渐进式特征金字塔网络:解决多尺度特征融合中,信息在传递过程丢失

AFPN 渐进式特征金字塔网络&#xff1a;解决多尺度特征融合中&#xff0c;信息在传递过程丢失 提出背景AFPN 多尺度特征金字塔 非邻近层次的直接特征融合 自适应空间融合操作 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 提出背景 论文&#xff1a;https:…

人力资源管理软件大比拼:这篇文章帮你做出明智选择!

本期为您盘点的助力现代企业强力提效的人力资源管理软件有&#xff1a;Zoho People&#xff0c;Workday&#xff0c;BambooHR和Namely。 Zoho People人力资源管理软件 Zoho People是一款全面的云端人力资源管理&#xff08;HRM&#xff09;软件&#xff0c;由Zoho Corporation…

Android开发快速上手,2024年展望Android原生开发的现状

前言 很多次小伙伴问到学习方法&#xff0c;我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 其实学习方法这个事情&#xff0c;我没啥发言权&#xff0c;因为我自己本身都是没啥方法可言的&#xff0c;就瞎折腾那种&#xff0c;但是大家想看这样的一篇文章&a…

TinyEMU编译与使用

TinyEMU编译与使用 1 介绍2 准备工作3 编译TinyEMU3.1 安装依赖库3.2 编译 4 运行TinyEMU4.1 在线运行4.2 离线运行 5 共享目录5.1 修改root_9p-riscv64.cfg5.2 启动TinyEMU5.3 执行挂载命令 6 TinyEMU命令帮助 1 介绍 原名为riscvemu&#xff0c;于2018-09-23&#xff0c;改为…

mapbox鼠标滑到气泡中不关闭气泡。

贴个群号 WebGIS学习交流群461555818&#xff0c;欢迎大家 效果图 像官网这样的例子&#xff0c;我们并不能鼠标移动到上面的popup内容中&#xff0c;但是有时候是有这样的需求的&#xff0c;比如复制里面的值&#xff0c;或者里面加个按钮&#xff0c;可以点击出现弹窗&…

STM32(19)I2C模块 主机发数据

发送数据&#xff1a; 等待空闲&#xff1a; 发送起始位&#xff1a; 发送地址&#xff1a; 发送数据&#xff1a;

鸿蒙中Text组件的展开和收起效果

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 效果&#xff1a; 原理分析&#xff1a; 通过效果图我们知道&#xff0c;可以将‘...展开’ 盖在文本内容的的右下角来实现这个效果。那么要实现盖上的效果可以通过层叠布局&#xff08;Stack&#xff09;来实现&am…

基于ceph-deploy部署Ceph 集群

Ceph分布式存储一、存储基础1、单机存储设备1.1 单机存储的问题 2、分布式存储(软件定义的存储SDS)2.1 分布式存储的类型 二、Ceph简介1、Ceph优势2、Ceph架构3、Ceph 核心组件4、OSD 存储后端5、Ceph 数据的存储过程6、Ceph 版本发行生命周期 三、Ceph 集群部署1、 基于 ceph-…