力扣---二叉树的锯齿形层序遍历

server/2024/10/21 17:31:51/

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

思路:

层序遍历 + 双端队列(奇偶层逻辑分离)

作者:Krahets
链接:. - 力扣(LeetCode)
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

代码:

/*** 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:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {deque<TreeNode*> due;vector<vector<int>> res;if (root != nullptr) due.push_back(root);while(!due.empty()){//打印奇数层vector<int> tmp;for(int i = due.size();i>0;--i){root = due.front();due.pop_front();tmp.push_back(root->val);if (root->left != nullptr) due.push_back(root->left);if (root->right != nullptr) due.push_back(root->right);}res.push_back(tmp);if(due.empty()) break;   //若为空,提前跳出//打印偶数层tmp.clear();for(int i = due.size();i>0;--i){root = due.back();due.pop_back();tmp.push_back(root->val);if (root->right != nullptr) due.push_front(root->right);if (root->left != nullptr) due.push_front(root->left);}res.push_back(tmp);}return res;}
};

http://www.ppmy.cn/server/38941.html

相关文章

vue 钩子函数updated什么时候触发

触发时机 updated是Vue生命周期钩子函数之一&#xff0c;在组件的数据变化导致虚拟DOM重新渲染并应用到实际DOM之后触发。具体来说&#xff0c;updated会在以下几种情况下被触发&#xff1a; 初始渲染完成后&#xff1a;当组件首次渲染完成并将虚拟DOM渲染到实际DOM之后&#…

【视频格式转换】【ffmepg】对mp4文件进行重新编码输出新的mp4文件

【视频格式转换】【ffmepg】对mp4文件进行重新编码输出新的mp4文件 背景 之前开发调试了个能正常调用ffmpeg解码mp4文件得到yuv数据的testbed(把ffmpeg开源库移植并交叉编译到一个嵌入式平台)&#xff0c;用了好几年了&#xff0c;今天用来挂测一批新的采集视频mp4文件&#x…

PROXY代理学习

代理&#xff08;PROXY&#xff09;学习 在计算机领域中&#xff0c;代理&#xff08;Proxy&#xff09;是一种特殊的网络服务&#xff0c;它充当客户端和服务器之间的中介&#xff0c;使得客户端能够通过代理与另一台服务器进行通信。代理服务可以用于多种目的&#xff0c;包括…

接口框架项目实战-pytest(四)请求封装接口关联

把所有的请求方法集中到一个地方 目的&#xff1a;利于后期维护和加入日志 异常处理 等 目的&#xff1a;框架封装好之后&#xff0c;功能测试不需要写代码&#xff0c;也能执行自动化测试 config.yml base:base_php_url: http://47.107.116.139base_wx_url: https://api.weix…

MySQL中逗号分隔字段查询方法

MySQL中逗号分隔字段查询 select * FROM th_work_gand_up where FIND_IN_SET(11,lane_code) ; select * from th_work_gand_up where lane_code regexp (^|,)(11|1)(,|$);

Git系列:git push (-u) 与 git branch (-u)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

设计模式——适配器模式(Adapter)

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;主要用于将一个类的接口转换成客户端所期望的另一种接口&#xff0c;从而使得原本因接口不兼容而无法一起工作的类能够协同工作。 适配器模式主要解决两类问题&#xff1a; 类的接口不兼容…

【stomp 实战】spring websocket 接收消息源码分析

后台消息的发送过程&#xff0c;我们通过spring websocket用户消息发送源码分析已经了解了。我们再来分析一下后端接收消息的过程。这个过程和后端发送消息过程有点类似。 前端发送消息 前端发送消息给服务端的示例如下&#xff1a; 发送给目的/app/echo一个消息。 //主动发…