【每日一题】反转二叉树的奇数层
文章目录
- Tag
- 题目来源
- 题目解读
- 解题思路
- 方法一:广度优先搜索
- 方法二:深度优先搜索
- 写在最后
Tag
【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】
题目来源
2415. 反转二叉树的奇数层
题目解读
反转二叉树奇数层的节点。
解题思路
对于二叉树中的节点反转,我们只需要交换节点的值。通常有广度优先搜索和深度优先搜索两种解决方法。
方法一:广度优先搜索
思路
按层遍历二叉树,将奇数层的节点都记录下来,如果当前的层是奇数层,就交换节点数组中的节点。
算法
在具体实现中,通过维护一个 bool 变量 isOdd 来记录当前层是否是奇数层。初始化 isOdd = false,因为广搜从根节点开始,这一层是 0 层当做偶数层。每遍历完一层之后更新 isOdd = !isOdd,下方实现中使用的是异或运算来更改 isOdd。
/*** 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 {
public:TreeNode* reverseOddLevels(TreeNode* root) {queue<TreeNode*> q;q.push(root);bool isOdd = false;while (!q.empty()) {int sz = q.size();vector<TreeNode*> arr;for (int i = 0; i < sz; ++i) {TreeNode* node = q.front();q.pop();if (isOdd) {arr.push_back(node);}if (node->left) { // 完美二叉树,有左子树一定也有右子树q.push(node->left);q.push(node->right);}}if (isOdd) {for (int l = 0, r = sz - 1; l < r; ++l, --r) {swap(arr[l]->val, arr[r]->val);}}isOdd ^= true;}return root;}
};
复杂度分析
时间复杂度: O ( n ) O(n) O(n), n n n 是二叉树中节点个数,每个节点都要被遍历一次。
空间复杂度: O ( n ) O(n) O(n),用数组记录二叉树的每一层的节点数,某一层最多有 ⌈ n 2 ⌉ \lceil{\frac{n}{2}}\rceil ⌈2n⌉ 个节点,因此空间复杂度为 O ( n ) O(n) O(n)。
方法二:深度优先搜索
思路
核心依然是交换值,通过递归左右子树实现。
算法
/*** 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 {
public:void dfs(TreeNode* root1, TreeNode* root2, bool isOdd) {if (root1 == nullptr) {return;}if (isOdd) {swap(root1->val, root2->val);}dfs(root1->left, root2->right, !isOdd);dfs(root1->right, root2->left, !isOdd);}TreeNode* reverseOddLevels(TreeNode* root) {dfs(root->left, root->right, true);return root;}
};
复杂度分析
时间复杂度: O ( n ) O(n) O(n), n n n 是二叉树中节点个数,每个节点都要被遍历一次。
空间复杂度: O ( l o g n ) O(logn) O(logn)。
写在最后
如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。
如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。
最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。
相关文章:
【每日一题】反转二叉树的奇数层
文章目录 Tag题目来源题目解读解题思路方法一:广度优先搜索方法二:深度优先搜索 写在最后 Tag 【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】 题目来源 2415. 反转二叉树的奇数层 题目解读 反转二叉树奇数层的节点。 解题思路 对于二叉…...
vue 项目配置反向代理导致项目白屏
问题:vue 项目配置反向代理导致项目白屏 一、现象描述 添加反向代理代码后,前端运行白屏 // 设置baseURL,8888是后端端口号,前端请求默认发送到baseURL的地址 var axios require(axios) axios.defaults.baseURL http://local…...
全国县级行政区点位数据,Shp+excel格式
基本信息. 数据名称: 县级行政区点位 数据格式: Shpexcel 数据时间: 2021年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源:网络公开数据 数据字段: 序号字段名称字段说明1xzqhdm_1省代码2xzqhmc_1省名称3xzqhdm_2市代码4xzqhmc_2市代…...
文件包含的提升刷题
上一篇文章:一篇文章带你入门文件包含-CSDN博客 已经开始入门了文件包含,那现在开始拔高提升刷题! 1. 拿到题目后啥也没有,所以也不知道要读取啥文件,那就查看源代码。 直接看if的条件就可以知道一定要设置cookie&a…...
入门级银行测试岗位招聘,只需具备这些基本条件!
2023年应该说是超乎意外的寒冷,几乎算是百业凋零。充斥在各个地方各个行业的,更多的是裁员的消息,很少有以往的风风火火的招聘了。无论是金九银十还是在以往的淡季。 谁也不知道这样一个特殊的寒冬还有多久才能过去。但是无论面对什么样的局…...
组里新来了个00后,真卷不过....
📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...
python 命令添加参数
官网 argparse模块可以很容易地编写用户友好的命令行界面。程序定义它需要什么参数,argparse将找出如何从sys.argv中解析这些参数。argparse模块还会自动生成帮助和用法消息。当用户为程序提供无效参数时,该模块也会发出错误。 核心功能 argparse模块对…...
LVS负载均衡器(DR模式)+nginx七层代理+tomcat多实例+php+mysql 实现负载均衡以及动静分离、数据库的调用!!!
目录 前言 一、nfs共享存储,为两个节点服务器提供静态网页共享 二、nginx作为lvs的后端节点服务器,完成lo:0网卡配置,以及内核参数设置,还有设置路由表 步骤一:先完成nfs共享存储挂载 步骤二:完成lo:0网…...
jmx_exporter安装
下载 wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar 创建jmx_exporter.yml文件 文件内容为: rules: - pattern: ".*" 配置tomcatpinter/apache-tomcat-8.5.38/bin/ca…...
怎么给自己的微信公众号留言?
为什么公众号没有留言功能?根据要求,自2018年2月12日起,新申请的微信公众号默认无留言功能。有些人听过一个说法:公众号粉丝累计到一定程度或者原创文章数量累计到一定程度就可以开通留言功能。其实这个方法是2018年之前才可以&am…...
Unity中 URP 下的棋盘格Shader
文章目录 前言一、制作思路法1:使用纹理采样后,修改重铺效果法2:计算实现 二、粗略计算实现棋盘格效果1、使 uv.x < 0.5 区域 0 。反之, 0.52、使 uv.y < 0.5 区域 0 。反之, 0.53、使两个颜色相加4、取小数…...
杰发科技AC7840——SPM电源管理之低功耗模式
0、SPM简介 很早以前就听过低功耗模式,一直没有怎么深入了解,最近遇到几个项目都是跟低功耗有关。正好AutoChips的芯片都有电源管理的功能,在此借用AC7840的SPM对低功耗进行测试。 1、AC7840的5种功耗模式 2、AC7840的模式转换 3、唤醒 在…...
PCL 点云匹配 之NICP(Normal ICP)
一、概述 上面一篇中我们已经得出了一个结论,就是ICP虽然简单,但是也有明显的缺点 1、计算速度慢,收敛慢,迭代次数多 2、对内存的开销比较大 3、很容易陷入局部最优的困局 因此我们在经典ICP的基础上添加一两个约束: 第…...
华脉智联融合通信一张图
随着通信技术、信息技术以及互联网的发展,融合通信技术也日益发展成熟。融合通信系统作为常见的通信指挥调度系统,其发挥的功能也越来越强大,在不同行业中的应用也越来越丰富。 华脉智联深耕融合通信行业多年,自主研发的融合通信…...
Flink系列之:窗口Top-N
Flink系列之:窗口Top-N 一、窗口Top-N二、示例:在窗口聚合后进行窗口 Top-N三、在窗口表值函数后进行窗口 Top-N四、限制 一、窗口Top-N 适用于流、批一体窗口 Top-N 是特殊的 Top-N,它返回每个分区键的每个窗口的N个最小或最大值。与普通To…...
【k8s】--insecure-registry详解 ( 访问仓库、https、http)
文章目录 一、--insecure-registry是什么二、如何使用--insecure-registry三、--insecure-registry的安全风险四、--insecure-registry的替代方案五、总结参考 一、–insecure-registry是什么 --insecure-registry是docker中用来设置与docker registry通信的安全限制的一个参数…...
ElementUI,修改el-cascader的默认样式
Element UI 中的下拉弹窗是通过在整个body标签末尾动态添加div实现的,所以修改样式时,必须要定义全局样式才能实现样式覆盖,那怎样才能避免全局的样式污染呢? 解决办法:通过给组件添加自定义的 popper-class 属性来避…...
外卖系统海外版:代码与美食的完美交融
在数字化时代,外卖系统海外版正引领着全球美食点餐的新潮流。不仅为用户提供了便捷的用餐服务,更通过技术创新为美食与代码之间搭建了一座桥梁。本文将探讨其中的一些技术应用,并呈现与美食完美交融的全新体验。 多语言支持代码示例 def m…...
Java代码解析:初学者的编程入门指南
💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 Java作为一门强大而广泛应用的编程语言&#x…...
数据结构--图
树具有灵活性,并且存在许多不同的树的应用,但是就树本身而言有一定的局限性,树只能表示层次关系,比如父子关系。而其他的比如兄弟关系只能够间接表示。 推广--- 图 图形结构中,数据元素之间的关系是任意的。 一、图…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
