当前位置: 首页 > news >正文

leetcode0103. 二叉树的锯齿形层序遍历-medium

1 题目:二叉树的锯齿形层序遍历

官方标定难度:中

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

示例 1:

在这里插入图片描述

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

示例 2:

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

示例 3:

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

提示:

树中节点数目在范围 [0, 2000] 内
-100 <= Node.val <= 100

2 solution

采用广度优先遍历,然后在偶数行翻转访问次序。

代码

/*** 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) {if (!root) return {};vector<vector<int>> res;vector<TreeNode *> last = {root};vector<TreeNode *> cur;res.push_back({root->val});vector<int> level;int i = 1;while (!last.empty()) {for (auto x: last) {if (x->left) {cur.push_back(x->left);level.push_back(x->left->val);}if (x->right) {cur.push_back(x->right);level.push_back(x->right->val);}}if(i % 2){std::reverse(level.begin(), level.end());}res.push_back(level);level = {};swap(cur, last);cur = {};i++;}res.pop_back();return res;
}};

结果

在这里插入图片描述

相关文章:

  • JAVA手写题-精通 Java 单例模式:三种线程安全的实现方式详解
  • JAVA:单例模式
  • 【锂电池剩余寿命预测】Transformer锂电池剩余寿命预测(Pytorch完整源码和数据)
  • Java : GUI
  • RC吸收电路参数设置实战
  • Python包的编译、构建与打包指南
  • IDEA常用快捷键及操作整理(详细图解,持续更新)
  • Allegro23.1新功能之如何冻结动态铜皮操作指导
  • 二、Web服务常用的I/O操作
  • 【Go语言】ORM(对象关系映射)库
  • 层级时间轮的 Golang 实现原理与实践
  • Grok发布了Grok Studio 和 Workspaces两个强大的功能。该如何使用?如何使用Grok3 API?
  • Win10安装 P104-100 驱动
  • Gin 框架中集成 runtime/debug 打印日志堆栈信息
  • Conda 虚拟环境复用
  • react的 Fiber 节点的链表存储
  • 通过示例学习:连续 XOR
  • 如何配置osg编译使支持png图标加载显示
  • mybatis首个创建相关步骤
  • 【音视频】SDL简介
  • 全文丨中华人民共和国传染病防治法
  • 国家医保局副局长颜清辉调任人社部副部长
  • 中吉乌铁路重点控制性工程开工建设,包括三座隧道
  • 建发股份:将于5月6日召开股东大会,审议提名林茂等为公司新一届董事等议案
  • 石家庄:城市更新,生活向美
  • 昆明破获一起算命破灾诈骗案,民警:大师算不到自己的未来