数据结构与算法——二叉树高频题目(1)
前言:
简单记录一下自己学习算法的历程,主要根据左老师自己的视频课进行,由于大部分课程涉及题目较多,所以分文章进行记录。
本文将简单记录一下二叉树的层序遍历和 Z 形层次遍历。
参考视频:
算法讲解036【必备】二叉树高频题目-上-不含树型dp
相关题目:
力扣--102. 二叉树的层序遍历
力扣--103. 二叉树的锯齿形层序遍历
关于层序遍历的学习:
重点在于 队列 的使用,和如何进行分层处理。整个算法思路同于BFS(宽度优先搜索)。我们每次只遍历当前队列长度次,确保只处理一层的数据。处理的过程中,弹出结点、加入子结点。当然也可以先处理当前层的数据,再加入新结点。队列或使用封装好的库,或直接用数组进行模拟。整体相对简单,不过多赘述。
题目解答:
1.力扣--102.二叉树的层序遍历
代码示例:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
private:static constexpr int N = 2001;vector<TreeNode*> queue;int size;
public:Solution() : queue(N), size(0) {}vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ans;int l = 0, r = 1;if(root == nullptr){return ans;}queue[0] = root;size = 1;while(size != 0){int times = size;vector<int> temp;for(int i = 0; i < times; i++){TreeNode* cur = queue[l++];size--;temp.push_back(cur->val);if(cur->left != nullptr){queue[r++] = cur->left;size++;}if(cur->right != nullptr){queue[r++] = cur->right;size++;}}ans.push_back(temp);}return ans;}
};
2.力扣--103.二叉树的锯齿形层序遍历
解题思路:
遍历层时,用reverse变量控制方向。循环时先处理同层,再添加下一层。最后更改reverse即可。
代码示例:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
private:static constexpr int N = 2001;vector<TreeNode*> queue;int size;
public:Solution() : queue(N), size(0) {}vector<vector<int>> zigzagLevelOrder(TreeNode* root) {vector<vector<int>> ans;if(root == nullptr){return ans;}int l = 0, r = 1;size = 1;queue[0] = root;bool reverse = false;//false -> 从左向右//true -> 从右向左while(size != 0){vector<int> temp;int times = size;//先处理当前层,得到对应数组for(int i = reverse ? r - 1 : l, j = reverse ? -1 : 1, k = 0; k < times; i += j, k++){//i 表示需要遍历的起始位置下标//j 表示增量,是向左还是向右//k 用于控制循环次数TreeNode* cur = queue[i];temp.push_back(cur->val);}ans.push_back(temp);//构建下一层for(int i = 0; i < times; i++){TreeNode* cur = queue[l++];size--;if(cur->left != nullptr){queue[r++] = cur->left;size++;}if(cur->right != nullptr){queue[r++] = cur->right;size++;}}//记得更改方向reverse = !reverse;}return ans;}
};
最后,文章主要用于个人记录,如有错误还望指出和海涵,感谢阅读 ^_^
相关文章:
数据结构与算法——二叉树高频题目(1)
前言: 简单记录一下自己学习算法的历程,主要根据左老师自己的视频课进行,由于大部分课程涉及题目较多,所以分文章进行记录。 本文将简单记录一下二叉树的层序遍历和 Z 形层次遍历。 参考视频: 算法讲解036【必备】…...

Web后端开发(SpringBootWeb、HTTP、Tomcat快速入门)
目录 SpringBootWeb入门 Spring 需求: 步骤: HTTP协议: 概述: 请求协议: 响应协议: 协议解析: Web服务器-Tomcat: 简介: 基本使用: SpringBootWeb…...
CppCon 2015 学习:Memory and C++ debugging at Electronic Arts
这是关于 C 游戏开发中内存接口与调试工具演进 的介绍,主要回顾了从早期到现在平台上的内存与调试策略变化: 游戏平台演进与内存接口编程风格 2000年 (PlayStation 2) 编程风格偏向嵌入式 C 风格。系统资源有限(例如 32MB RAM)…...

android binder(四)binder驱动详解2
二、情景分析 1、ServiceManager 启动过程 2. 服务注册 服务注册过程(addService)核心功能:在服务所在进程创建binder_node,在servicemanager进程创建binder_ref。其中binder_ref的desc在同一个进程内是唯一的: 每个进程binder_proc所记录的…...

4G无线网络转串口模块 DTU-1101
4G无线网络转串口模块概述 4G无线网络转串口模块是一种工业通信设备,通过4G网络将串口(如RS232/RS485)设备接入互联网,实现远程数据传输与控制。适用于物联网(IoT)、工业自动化、远程监控等场景。 核心功能…...

机器学习方法实现数独矩阵识别器
目录 导包 工具函数构建说明 1. 基础图像处理工具 2. 图像预处理模块 3. 数独轮廓检测与定位 4. 网格划分与单元格提取 5. 数字特征提取 6. 多网格处理流程 数据流分析 核心算法详解 核心机器视觉方法 1. 透视变换校正算法 2. 数字区域提取算法 3. 多网格检测算法…...
OpenEuler服务器警告邮件自动化发送:原理、配置与安全实践
OpenEuler服务器警告邮件自动化发送:原理、配置与安全实践 在服务器的运维管理过程中,及时感知系统异常状态至关重要。当OpenEuler系统运行时,将服务器的警告信息实时推送至邮箱,能帮助运维人员快速响应潜在问题,保障…...
随机访问介质访问控制:网络中的“自由竞争”艺术
想象一场自由辩论赛——任何人随时可以发言,但可能多人同时开口导致混乱。这正是计算机网络中随机访问协议的核心挑战:如何让多个设备在共享信道中高效竞争?本文将深入解析五大随机访问技术及其智慧。 一、核心思想:自由竞争 冲突…...
【Redis】笔记|第9节|Redis Stack扩展功能
Redis Stack 扩展功能笔记(基于 Redis 7) 一、Redis Stack 概述 定位:Redis OSS 扩展模块(JSON、搜索、布隆过滤器等),提供高级数据处理能力。核心模块: RedisJSON:原生 JSON 支持…...

【Vmwrae】快速安装windows虚拟机
前言 虚拟机是我们在使用电脑进行开发或者平常工作时经常使用到的工具 它可以自定义各种硬件,运行各种不同的系统,且无论发生什么都不会影响到实体机。 教程主要讲了如何在零基础的情况下快速安装一台虚拟机。 下载安装 VMware Workstation Pro17 …...

多线程3(Thread)
wait / notify 线程调度是随机的,但是我们可以使用wait/notify进行规划。 join是控制线程结束顺序,而wait/notify是控制详细的代码块,例如: 线程1执行完一段代码,让线程2继续执行,此时线程2就通过wait进…...

附加模块--Qt Shader Tools功能及架构解析
Qt 6.0 引入了全新的 Shader Tools 模块,为着色器管理提供了现代化、跨平台的解决方案。 一、主要功能 核心功能 跨平台着色器编译 支持 GLSL、HLSL 和 MetalSL 着色器语言 可在运行时或构建时进行着色器编译 自动处理不同图形API的着色器变体 SPIR-V 支持 能…...
ffmpeg(五):裁剪与合并命令
裁剪(剪切) 精准裁剪(有转码,支持任意起止时间) # 从第 10 秒到第 30 秒,重新编码 ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c:v libx264 -c:a aac output.mp4快速裁剪(无转码&#x…...
CCPC guangdongjiangsu 2025 F
题目链接:https://codeforces.com/gym/105945/problem/F 题目背景: 你知道自己队伍的过题数、罚时,还知道另一个队伍的每次提交记录(三种状态:ac:通过,rj:未通过,pb&…...
SSE (Server-Sent Events) 技术简介
一、SSE 技术概述 Server-Sent Events (SSE) 是一种允许服务器向客户端实时推送数据的 Web 技术,它基于 HTTP 协议实现服务器到客户端的单向通信。 基本特点 ● 单向通信:仅服务器→客户端方向 ● 基于HTTP:使用标准HTTP协议,无需…...

网络编程(计算机网络基础)
思维导图 认识网络 1.网络发展史 ARPnetA(阿帕网)->internet(因特网)->移动互联网->物联网 2.局域网与广域网 局域网 概念:的缩写是LAN(local area network),顾名思义,是个本地的网络,只能实现…...
常见 DOM 事件全解析
常见 DOM 事件全解析 DOM 事件是用户与网页交互的核心机制,分为 用户交互事件、文档加载事件、表单事件、键盘事件 等 8 大类: 一、鼠标事件 事件触发时机典型应用场景click点击元素(按下+释放)按钮操作、导航跳转dblclick双击元素文件/图片编辑mousedown鼠标按下拖拽开始…...

在React 中安装和配置 shadcn/ui
1. 创建 React 项目 pnpm create vitelatest .选择模板:React TypeScript安装依赖:pnpm install2. 添加 Tailwind CSS pnpm add -D tailwindcss postcss autoprefixer修改 src/index.css 内容: import "tailwindcss";3. 配置 T…...

WINUI——WINUI开发中谨慎使用x:Bind
原因——为什么需要谨慎使用x:Bind? 在实际开发中发现,使用它会导致VM回收不及时,可能导致内存泄漏。 那为何要在项目中使用它呢? 因为:{x:Bind} 标记扩展(Windows 10 的新增功能)…...

MSYS2 环境配置与 Python 项目依赖管理笔记
#工作记录 MSYS2 环境配置 安装和更新 MSYS2 初始安装 下载并安装 MSYS2: 访问 MSYS2 官方网站 并下载安装包。 按照安装向导完成安装。 更新 MSYS2: 打开 MSYS2 终端(MSYS2 MINGW64)。 更新包数据库和核心系统包࿱…...
Elasticsearch:spring2.x集成elasticsearch8.x
相关安装就不介绍了直接代码集成 <!-- elasticsearch版本需要和你安装的版本一致 --><properties><elasticsearch.version>8.11.1</elasticsearch.version><jakarta-json.version>2.1.2</jakarta-json.version><logstash.version>7…...

华为云Flexus+DeepSeek征文|华为云一键部署知识库搜索增强版Dify平台,构建智能聊天助手实战指南
目录 前言 1 架构描述 2 资源栈创建流程详解 2.1 选择部署模板 2.2 参数配置内容 2.3 资源栈设置选项 2.4 配置确认与执行方式 3 部署过程与控制台反馈 3.1 实时资源监控 3.2 资源详情与访问路径 3.3 模板与事件管理 4 知识库构建流程 4.1 数据导入操作 4.2 文本…...
gem5-gpu教程 在gem5-gpu上运行多个应用程序
问题一、gem5-gpu是否能够在系统调用仿真中同时运行两个不同的应用程序,一个在CPU上,另一个在gpu上。如果是这样,我该怎么做?我查看了配置和帮助文件,没有找到明确的方法。看起来rodinia基准测试使用CPU在GPU内核中启动工作,CPU内核在GPU执行时几乎处于空闲状态。这里的另…...

分形几何在医学可视化中的应用:从理论到Python实战
分形几何在医学可视化中的应用:从理论到Python实战 前言 分形几何作为描述自然界复杂结构的数学工具,正通过其自相似性和分数维度特性,革新医学影像分析领域。本文系统阐述分形几何在医学影像中的创新应用,涵盖从图像预处理、分…...
四自由度机械臂Simulink仿真设计与实现
四自由度机械臂Simulink仿真设计与实现 摘要 本文详细介绍了基于MATLAB/Simulink的四自由度机械臂建模、仿真与控制实现。通过建立完整的运动学和动力学模型,设计PID控制器,实现轨迹跟踪功能,并利用3D可视化技术进行仿真验证。全文涵盖理论建模、Simulink实现和仿真分析三…...

ESP-Brookesia:融合 AI 大模型,全新一代 GUI 开发与管理平台
乐鑫信息科技 (688018.SH) 推出 ESP-Brookesia ——一款专为物联网设备打造、集成 AI 交互能力的 UI 开发与管理框架。 ESP-Brookesia 深度融合 AI 大模型技术,为智能屏显应用赋予语音识别、自然语言对话、拟人化反馈等能力,帮助开发者构建更智能、更具…...

【MATLAB去噪算法】基于CEEMD联合小波阈值去噪算法(第三期)
02.去噪算法原理 1.引言 传统EMD方法存在模态混叠问题,即信号成分在不同IMF分量中出现碎片化分布。为改进这一问题,Huang等(1999)提出间歇性测试算法,但效果有限。Wu和Huang(2009)发展的集合经…...

机器学习实战37-基于情感字典和机器学习的股市舆情分析可视化系统
文章目录 一、项目背景数字时代情感分析情况二、项目流程1.数据采集与预处理2.复合情感分析模型构建3.舆情分析可视化:三、机器学习算法原理1.支持向量机基础2.核函数与高维映射3.情感分类特征融合4.模型训练与优化四、实现代码五、系统特点与优势1.复合情感分析模型2.多维度可…...
【2025CVPR】模型融合新范式:PLeaS算法详解(基于排列与最小二乘的模型合并技术)
本文深入解析ICLR 2025顶会论文《PLeaS: Merging Models with Permutations and Least Squares》,揭示模型融合领域突破性进展. 一、问题背景:模型合并的核心挑战 随着开源模型的爆发式增长,如何高效合并多个专用模型成为关键挑战。传统方法存在三大痛点: 初始化依赖…...

CAD多面体密堆积3D插件
插件介绍 CAD多面体密堆积3D插件可在AutoCAD内建立三维随机多面体密堆积模型。 插件内置物理动力学模拟算法,通过模拟重力、碰撞等现象,使多面体在虚拟环境中发生自然堆积,进而实现真实的堆积效果。多面体堆积模拟中存在的局部穿模问题可通…...