【代码随想录】算法训练营 第十五天 第六章 二叉树 Part 2
102. 二叉树的层序遍历
层序遍历,就是一层一层地遍历二叉树,最常见的就是从上到下,从左到右来遍历,遍历的方法依然有两种,第一种是借助队列,第二种则是递归,都算是很简单、很容易理解的方法,下面来分别介绍一下。
队列法
使用队列法讲究的就是一个简单粗暴,顺着做下去就行了。
首先要定义一个队列,这个队列的元素都得是二叉树结点,因为它是用来暂存二叉树的一层的。先是把根结点入队,当然如果连根结点都没有的话,就直接返回空数组了(要返回的是保存各层元素的二维数组,用vector容器实现);
接着就用vector定义一个保存遍历下来的元素的二维数组,作为result来最终返回答案;
现在就开始遍历了,我们用的是while循环,当队列为空时停止,在一轮循环中,队列存的是这层要遍历的结点,所以先定义一个size来保存未经遍历的层结点数,因为下面我们在遍历一个结点后就要把它出队,以便于存入下一层的结点;
遍历中,使用一个一维数组保存元素值,然后就把这个结点的左右子结点依次入队,因为是队列,就不用像栈那样反着来。每层遍历结束后,就把遍历得到的元素数组push进result二维数组里。
具体代码如下:
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> que;vector<vector<int>> result;if (root != NULL) que.push(root);while (!que.empty()) {int size = que.size();vector<int> vec;for (int i = 0; i < size; i++) {TreeNode* node = que.front();que.pop();vec.push_back(node->val);if (node->left) que.push(node->left);if (node->right) que.push(node->right);}result.push_back(vec);}return result;}
};
递归法
这个不用掌握,了解一下即可。但是下面的两道还是优先使用递归来做。
class Solution {
public:void order(TreeNode* cur, vector<vector<int>>& result, int depth) {if (cur == nullptr) return;if (result.size() == depth) result.push_back(vector<int>());result[depth].push_back(cur->val);order(cur->left, result,depth + 1);order(cur->right, result, depth + 1);}vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;int depth = 0;order(root, result, depth);return result;}
};
226. 翻转二叉树
题目

思路
看到翻转,你可能会先想到一层一层地将结点翻转,但其实不用这么复杂,稍微观察一下就知道,只需要翻转每个结点的两个子结点即可,所以这里就可以用递归遍历的方法来做,先对调两个子结点,再遍历子结点,最后返回根结点即可。
盲区
随想录刷到这里才知道,swap函数还可以用来对调两个二叉树结点,长知识了:
swap(root->left, root->right);
代码
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;swap(root->left, root->right);invertTree(root->left);invertTree(root->right);return root;}
};
101. 对称二叉树
题目

思路
还是用递归来做,每次递归判断对称的两个结点,若其中一个为空则返回false,两个都为空则返回true,接着都是不为空的,此时就判断两个结点值是否相等,不相等就返回false,否则就接着往下递归,先递归判断左边的左孩子和右边的右孩子,再递归判断左边的右孩子和右边的左孩子,这样就是对称位置的结点来判断是否相等了,将判断结果分别赋值给一个布尔变量,两个布尔变量都为true时就返回true。
代码
class Solution {
public:bool compare(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 if (left->val != right->val) return false;bool outside = compare(left->left, right->right);bool inside = compare(left->right, right->left);bool isSame = outside && inside;return isSame;}bool isSymmetric(TreeNode* root) {if (root == NULL) return true;return compare(root->left, root->right);}
};
相关文章:
【代码随想录】算法训练营 第十五天 第六章 二叉树 Part 2
102. 二叉树的层序遍历 层序遍历,就是一层一层地遍历二叉树,最常见的就是从上到下,从左到右来遍历,遍历的方法依然有两种,第一种是借助队列,第二种则是递归,都算是很简单、很容易理解的方法&am…...
使用ssl_certificate_by_lua指令动态加载证书
1、下载 OpenResty - 下载 根据自己系统选择下载,我的是64位 2、解压到目录 3、启动openresty 进入解压后的目录,执行nginx.exe 浏览器输入 http://localhost 查看是否正常。显示以下画面就表示没有问题。 接下来可以开始准备动态安装证书 4、使用o…...
Qt中Opencv转Qimage出现重影或者颜色不对
废话不多说 在qt中opencv获取的图像转qimage时出现重影原因: 图像数据的内存对齐可能会导致画面重影,如果出现误差转换出来的图就会出现重影 解决办法: cv::Mat image_bgr cv::imread(“example.jpg”); cv::Mat image_aligned; cv::copyMak…...
upload-labs-1
文章目录 Pass-01 Pass-01 先上传一个正常的图片,查看返回结果,结果中带有文件上传路径,可以进行利用: 上传一个恶意的webshell,里面写入一句话木马: <?php eval($_POST[cmd]); echo "hello&quo…...
【vite配置路径别名@】/启动配置
npm install types/node --save-dev npm install path --save import { defineConfig } from vite import vue from vitejs/plugin-vue // 配置别名 import { resolve } from "path";// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()]…...
3. List
数据结构在Java集合中的对应关系 线性表【数组】 -> ArrayList 线性表【链表】-> LinkedList 队列 -> Queue -> LinkedList,PriorityQueue, ArrayBlockingQueue … etc. 双端队列 -> Deque -> ArrayDeque 栈 -> LinkedList 哈希表 -> Hash…...
Django初窥门径-oauth登录认证
引言 在现代Web应用程序中,用户身份验证和授权是至关重要的组成部分。Django,一个流行的Python Web框架,为用户身份验证提供了内置支持。本文将探讨如何创建和注册Django应用,自定义身份验证服务,配置AUTHENTICATION_…...
数学到底在哪里支撑着编程?
数学到底在哪里支撑着编程? 除了少数算法等明显相关情况外,说点日常的。 编程是个极度依赖逻辑的领域,逻辑严谨性好,你的编程工作会顺畅很多一-绝大多 数的bug都是最近很多小伙伴找我,说想要一些嵌入式的资料&#x…...
Python模块ADB的, 已经 pyadb
Python模块ADB的使用指南_笔记大全_设计学院 (python100.com) pip install adb Python 调用ADB_python 调用adb命令_实相实相的博客-CSDN博客 Python ADB.shell_command Examples, pyadb.ADB.shell_command Python Examples - HotExamples Gitee 极速下载/PyADB - 码云 - 开…...
猫头虎分享从Python到JavaScript传参数:多面手的数据传递术
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
注解汇总:Spring 常用的注解
前言 本栏目的内容已经讲完了,本案例将把案例中所有讲到的注解都汇总起来,方便日后的学习需要用到的时候能够快速的找到相应的注解。本案例将结合小案例一起做汇总,也想丹玉是再复习一遍讲过用过的注解。 一、注解汇总 1、Component Reposi…...
合肥工业大学操作系统实验5
✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…...
基于SpringBoot+Vue的点餐管理系统
基于springbootvue的点餐平台网站系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 菜品详情 个人中心 订单 管理员界面 菜品管理 摘要 点餐管理系统是一种用…...
C# 继承,抽象,接口,泛型约束,扩展方法
文章目录 前言模拟需求场景模拟重复性高的需求初始类结构继承优化抽象类 需求1:打印CreateTime方法1:使用重载方法2:基类函数方法3:泛型约束方法3.1:普通泛型方法方法3.2:高级泛型约束,扩展方法…...
mysql的备份和恢复
备份:完全备份 增量备份 完全备份:将整个数据库完整的进行备份 增量备份:在完全备份的基础之上,对后续新增的内容进行备份 备份的需求 1、在生产环境中,数据的安全至关重要,任何数据的都可能产生非常严重…...
【机器学习3】有监督学习经典分类算法
1 支持向量机 在现实世界的机器学习领域, SVM涵盖了各个方面的知识, 也是面试题目中常见的基础模型。 SVM的分类结果仅依赖于支持向量,对于任意线性可分的两组点,它 们在SVM分类的超平面上的投影都是线性不可分的。 2逻辑回归 …...
lv11 嵌入式开发 计算机硬件基础 1
目录 1 导学 1.1回顾及导学 1.2 嵌入式系统分层 1.3 linux底层开发 2 ARM体系结构与接口技术课程导学 3 计算机基础 3.1 计算机的进制 3.2 计算机组成 3.3 总线 4 多级存储结构与地址空间 4.1 多级存储概念 4.2 地址空间 5 CPU工作原理 6 练习 1 导学 1.1回顾及导…...
【Linux】vim
文章目录 一、vim是什么?二 、命令模式三、插入模式四、底行模式五、vim配置 一、vim是什么? Vim是一个强大的文本编辑器,它是Vi的增强版,支持多种语法高亮、插件扩展、多模式操作等功能。Vim有三种基本的工作模式:命…...
cstring函数
string 1.char str[]类型 fgets(s,10000,stdin) cin.getline(cin,10000) strlen(str) sizeof 求静态数组长度 2.string类型 getline(cin,a) cin.getline(cin,10000) str.lenth() str.size() cin 遇到空格就停止 3.gets 函数 char str[20]; gets(str); 4.puts 函…...
【owt】p2p client mfc 工程梳理
1年前构建的,已经搞不清楚了。所以梳理下,争取能用较新的webrtc版本做测试。最早肯定用这个测试跑通过 【owt】p2p Signaling Server 运行、与OWT-P2P-MFC 交互过程及信令分析官方的mfc客户端 估计是构造了多个不同的webrc版本的客户端...
课堂录音转文字app口碑推荐 | 实测筛选的实用工具清单
2026年我们前后测了12款市面上主流的录音转文字app,最终筛出4款真正适配课堂场景的实用工具,专门针对有课程录音转写需求的学生、考公考证党,不用再挨个下载试错浪费时间。大家找课堂录音转文字工具的核心需求其实都差不多:要么是…...
Python全栈开发实战指南:7大技术领域×100个实践案例
Python全栈开发实战指南:7大技术领域100个实践案例 【免费下载链接】Python-100-Days Python - 100天从新手到大师 项目地址: https://gitcode.com/GitHub_Trending/py/Python-100-Days Python作为一门通用编程语言,已渗透到软件开发的各个领域。…...
k6:现代性能测试工具的新标杆
本人已经有几年不接触性能测试了,近些年一直是在从事功能和操作系统的自动化测试工作,现在回头看以前所专注的性能测试工具,感觉是有点跟不上时代了,在网上无意中发现一款比较火的工具k6,我也不知道这工具是哪年冒出来…...
11. 免费GPU资源汇总(三):腾讯云、百度智能云免费算力实操
调试卡在CUDA out of memory?聊聊免费GPU算力的门道 昨天帮同事调试一个目标检测模型,明明batch_size已经调到4了,还是爆显存。实验室的2080Ti卡被其他项目占着,自己笔记本的3060跑不动。这种时候才真切感受到——独立GPU资源对开发者来说,有时候比代码能力还关键。 免费…...
openEuler 24.03 LTS SP3 跨版本升级安装源设置全指南
一、背景认知 1.1 版本与升级基础 openEuler 24.03 LTS SP3:2025 年 12 月 30 日正式发布,基于 Linux 6.6 内核,提供 4 年社区长期支持,修复了前期版本的已知问题,大幅优化了 AI、数据库和异构计算性能,是…...
告别重复造轮子:用快马AI一键生成stm32的i2c传感器驱动模块
作为一名经常和STM32打交道的开发者,最头疼的就是每次新项目都要重复写那些底层驱动代码。最近发现InsCode(快马)平台的AI生成功能,简直是为嵌入式开发量身定制的效率神器。就拿最常用的I2C传感器驱动来说,以前手动编写至少要花半天时间&…...
多维创新打造强泛化智能体模型,LongCat-Flash-Thinking-2601技术报告
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
SEO 优化与网站分析有什么关系
SEO优化与网站分析:不可分割的伙伴 在当今数字化时代,拥有一个成功的网站不仅仅是一个企业的门面,更是其吸引客户和拓展市场的重要途径。无论你是初创企业还是成熟的行业巨头,网站的流量和用户体验直接影响着你的商业成功。而在这…...
django让所有的静态文件都需要登录才能访问-----exoplayer设置cookie
禁止apache直接访问:设置:/etc/apache2/sites-available/000-default.conf<Directory "/var/www/html/music">Require all denied </Directory>def get_music(request,filename):file_path f"/var/www/html/music/{filename…...
掌握Agentic RAG:大模型检索进阶实践,小白也能轻松收藏学习!
掌握Agentic RAG:大模型检索进阶实践,小白也能轻松收藏学习! 本文深入解析了Agentic RAG架构如何通过智能代理能力、动态任务规划和多步骤推理,超越传统RAG的被动模式,实现复杂问题的自主拆解与精准回答。以DeepSearch…...
