当前位置: 首页 > 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简介
  • 监狱法修订草案提请全国人大常委会会议审议
  • 扎克伯格怕“错过风口”?Meta AI数字伴侣被允许与未成年人讨论不当话题
  • 国家发展改革委:我们对实现今年经济社会发展目标任务充满信心
  • 我国已形成完整人工智能产业体系,专利申请量位居全球首位
  • “富卫保险冠军赛马日”创双纪录,打造赛马旅游盛宴,印证香港联通国际优势
  • 青年如何打破“千人一面”,创造属于自己的文化观?