代码随想录-刷题第十五天

二叉树层序遍历

题目链接:102. 二叉树的层序遍历

思路:利用队列来存储遍历的节点,同时要定义size来保存当前层的节点个数。

时间复杂度O(n)

层序遍历的一般写法,通过一个 while 循环控制从上向下一层层遍历,for 循环控制每一层从左向右遍历。

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new LinkedList<>();if (root == null) {return res;}Queue<TreeNode> q = new LinkedList<>();q.offer(root);// while 循环控制从上向下一层层遍历while (!q.isEmpty()) {// 存储当前层的节点个数int sz = q.size();// 记录这一层的节点值List<Integer> level = new LinkedList<>();// for 循环控制每一层从左向右遍历for (int i = 0; i < sz; i++) {TreeNode cur = q.poll();level.add(cur.val);if (cur.left != null)q.offer(cur.left);if (cur.right != null)q.offer(cur.right);}res.add(level);}return res;}
}

226.反转二叉树

题目链接:226. 翻转二叉树

思路:可以用层序遍历实现,前序和后序的递归遍历也可以实现,中序的递归遍历实现逻辑较为复杂(不推荐)。迭代遍历也可以实现。(注意:是交换节点的左右子树(改变指针指向),而不是交换左右孩子的值。)

层序遍历实现

class Solution {public TreeNode invertTree(TreeNode root) {if (root == null) return null;Queue<TreeNode> que = new LinkedList<>();que.add(root);while (!que.isEmpty()) {TreeNode node = que.poll();TreeNode temp = node.left;node.left = node.right;node.right = temp;if (node.left != null) {que.add(node.left);}if (node.right != null) {que.add(node.right);}}return root;}
}

前序递归遍历实现。

class Solution {public TreeNode invertTree(TreeNode root) { // 递归前序实现if (root == null) return null;TreeNode temp = root.left;root.left = root.right;root.right = temp;invertTree(root.left);invertTree(root.right);return root;}
}

后序递归遍历实现。

class Solution {public TreeNode invertTree(TreeNode root) { // 递归后序实现if (root == null) return null;invertTree(root.left);invertTree(root.right);TreeNode temp = root.left;root.left = root.right;root.right = temp;return root;}
}

101.对称二叉树

题目链接:101. 对称二叉树

思路:该题其实是判断两棵树是否相同,只能采用后序遍历。根节点的左子树的遍历顺序为左、右、中,根节点的右子树的遍历顺序为右、左、中,都可以理解为后序遍历。

class Solution {public boolean isSymmetric(TreeNode root) {if (root == null) return true;// 检查两棵子树是否对称return check(root.left, root.right);}boolean check(TreeNode left, TreeNode right) {if (left == null || right == null) return left == right;// 两个根节点需要相同if (left.val != right.val) return false;// 左右子节点需要对称相同return check(left.right, right.left) && check(left.left, right.right);}
}

另一种写法:

class Solution {public boolean isSymmetric(TreeNode root) {return compare(root.left, root.right);}private boolean compare(TreeNode left, TreeNode right) {if (left == null || right == null) {if (left == null && right == null) {return true;} else {return false;}}if (left.val != right.val) return false;boolean outside = compare(left.left, right.right);boolean inside = compare(left.right, right.left);return outside && inside;}
}

递归三部曲:

1、确定递归函数的参数和返回值。

2、确定终止条件。

3、确定单层递归的逻辑。


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

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

相关文章

动态规划学习——回文串

目录 一&#xff0c;回文子串 1.题目 2.题目接口 3&#xff0c;解题代码及其思路 解题代码&#xff1a; 二&#xff0c; 分割回文串II 1&#xff0c;题目 2&#xff0c;题目接口 3&#xff0c;解题思路及其代码 一&#xff0c;回文子串 1.题目 给你一个字符串 s &…

模板初阶(2):函数模板的匹配原则,类模板的实例化

一、函数模板的匹配原则 int Add(const int& x, const int& y) {return x y; }template <class T> T Add(const T& x, const T& y) {return x y; }int main() {int a1 1, a2 2;Add(a1, a2);double d1 1.1, d2 2.2;Add(d1, d2);return 0; }一个非模…

Unity 加载本地图片的方法

Unity加载本地图片有不少方法&#xff0c;一般使用以下这些&#xff1a; 1、使用System.IO下的File.ReadAllBytes方法&#xff1a; //方法一void LoadTextureFromFile1(string filePath){// 创建一个Texture2DTexture2D texture new Texture2D(1, 1);// 加载图片数据byte[] i…

【搭建网站】搭建一个自己的网站

【搭建网站】搭建一个自己的网站 传送门&#xff1a;搭建一个自己的网站&#xff1f;看这个就够了&#xff01; P1&#xff0c;建站准备 P2&#xff0c;创建站点

汇编:call与ret/retf指令

一、call指令 ​​​​​​​ 1.1 依据位移进行转移&#xff1a;call 标号 1.2 实现段间转移&#xff1a;call far ptr 标号 1.3 转移地址在寄存器中&#xff1a;call 16位寄存器 1.4 转移地址在内存中 1.4.1 call word ptr 内存单元地址 1.4.2 call dword ptr 内存单元地址…

E/Acc有效加速主义与EA有效利他主义

隐形人工智能初创公司 Extropic 的创始人、前谷歌工程师 Guillaume Verdon 领导了席卷硅谷的“有效加速主义&#xff08;E/Acc&#xff09;”运动。 他在被人肉以后发布声明&#xff1a; 不幸地通过语音取证和网络侦查&#xff0c;被记者人肉搜索了我的身份和秘密初创公司。当…

NVMe Over Fabrics with iRDMA总结 - 2

5.0 Configure NVMe over Fabrics Target (Storage Server) 配置 NVMe over Fabrics 目标机(存储服务器) 5.1 Install NVMe over Fabrics Tools安装 NVMe over Fabrics 工具 5.1.1 Install nvme-cli安装 nvme-cli Download nvme-cli from: 从以下网址下载 nvme-cli:https:…

基于springboot2 mysql Mybatis拦截器 实现 数据库脱敏

在 Spring Boot 2 中使用 MySQL 和 MyBatis 实现数据库脱敏&#xff0c;你可以考虑借助 MyBatis 的拦截器机制来实现。下面是一个简单的示例&#xff0c;演示如何在查询数据时进行脱敏处理。 假设有一个实体类 User&#xff0c;其中包含需要脱敏的字段&#xff0c;比如 name 和…

ZooKeeper 如何保证数据一致性?

在分布式场景中&#xff0c;ZooKeeper 的应用非常广泛&#xff0c;比如数据发布和订阅、命名服务、配置中心、注册中心、分布式锁等。 ZooKeeper 提供了一个类似于 Linux 文件系统的数据模型&#xff0c;和基于 Watcher 机制的分布式事件通知&#xff0c;这些特性都依赖 ZooKee…

【开源】基于JAVA语言的桃花峪滑雪场租赁系统

项目编号&#xff1a; S 036 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S036&#xff0c;文末获取源码。} 项目编号&#xff1a;S036&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设…

Redis数据存储:高效、灵活、实时

目录 引言 1. Redis概述 1.1 什么是Redis&#xff1f; 1.2 Redis的数据结构 1.3 Redis的持久化机制 2. Redis的使用场景 2.1 缓存 2.2 会话存储 2.3 发布/订阅系统 2.4 计数器和排行榜 3. Redis最佳实践 3.1 数据模型设计 3.2 键的命名规范 3.3 事务和原子操作 3…

国产AI边缘计算盒子,双核心A55丨2.5Tops算力

边缘计算盒子 双核心A55丨2.5Tops算力 ● 2.5TopsINT8算力&#xff0c;支持INT8/INT4/FP16多精度混合量化。 ● 4路以上1080p30fps视频编解码&#xff0c;IVE模块独立提供图像基础算子加速。 ● 支持Caffe、ONNX/PyTorch深度学习框架&#xff0c;提供resnet50、yolov5等AI算…

西南科技大学模拟电子技术实验四(集成运算放大器的线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 反相比例运算电路(1)实验…

【开源视频联动物联网平台】j2mod 库写一个Modbus RTU 服务器

J2Mod是一个Java编写的Modbus通信库&#xff0c;可以用于实现Modbus RTU服务器。以下是一个简单的示例&#xff0c;演示如何使用J2Mod库创建一个Modbus RTU服务器&#xff1a; 添加J2Mod库依赖项&#xff1a; 首先&#xff0c;确保在项目中包含J2Mod库。你可以将J2Mod库添加到…

C++包装类

C包装类是为了统一解决一些调用问题&#xff0c;在C中&#xff1a;“函数指针回调、仿函数、lambda表达式”都属于可调用对象&#xff0c;他们都可以达到函数函数的行为&#xff0c;达到回调函数和事件处理的功能。 但他们各有优缺点&#xff1a; 函数指针&#xff1a;符合C/…

QT 中 QDateTime::currentDateTime() 输出格式备查

基础 QDateTime::currentDateTime() //当前的日期和时间。 QDateTime::toString() //以特定的格式输出时间&#xff0c;格式 yyyy: 年份&#xff08;4位数&#xff09; MM: 月份&#xff08;两位数&#xff0c;07表示七月&#xff09; dd: 日期&#xff08;两位数&#xff0c…

合成相机模型【图形学】

相机在计算机图形学中有两个方面的考虑&#xff1a;相机的位置和相机的形状。 要了解后者&#xff0c;我们需要了解相机的工作原理。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - R…

如何在Rocky Linux中安装nmon

一、环境基础 [rootlocalhost nmon16d]# cat /etc/redhat-release Rocky Linux release 9.2 (Blue Onyx) [rootlocalhost nmon16d]# uname -r 5.14.0-284.11.1.el9_2.x86_64 [rootlocalhost nmon16d]# 二、安装步骤 在Rocky Linux和AlmaLinux等基于RHEL 的发行版上&#xff…

编程实战:类C语法的编译型脚本解释器(四)

系列入口&#xff1a; 编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 本文介绍总入口和使用方法。 一、总入口 class IScript{private:CScript* m_p;string m_msg;public:IScript() :m_p(nullptr) {}string GetMessage()const;//连接bo…

前后端数据传输格式(上)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 作为后端&#xff0c;写…