1. 题目

2. 解答

定义两个栈 s_l_r、s_r_l 分别负责从左到右和从右到左遍历某一层的节点,用标志变量 flag 来控制具体情况,根节点所在层 flag=1 表示从左到右遍历,每隔一层改变一次遍历方向。

用栈 s_l_r 从左到右遍历当前层节点时,按照先左子节点再右子节点的顺序将这一层节点的子节点依次放入栈 s_r_l 中。

用栈 s_r_l 从右到左遍历当前层节点时,按照先右子节点再左子节点的顺序将这一层节点的子节点依次放入栈 s_l_r 中。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {vector<vector<int>> result;vector<int> temp;stack<TreeNode *> s_l_r;stack<TreeNode *> s_r_l;if (root)   s_l_r.push(root);int flag = 1; // 根节点层从左往右遍历,然后每隔一层改变遍历方向while (!s_l_r.empty() || !s_r_l.empty()){if (flag){while (!s_l_r.empty()){TreeNode * cur = s_l_r.top();s_l_r.pop();temp.push_back(cur->val);if (cur->left) s_r_l.push(cur->left);if (cur->right) s_r_l.push(cur->right);} }else{while (!s_r_l.empty()){TreeNode * cur = s_r_l.top();s_r_l.pop();temp.push_back(cur->val);if (cur->right) s_l_r.push(cur->right);if (cur->left) s_l_r.push(cur->left);} }flag = 1 - flag;result.push_back(temp);temp.clear();}return result;}
};

获取更多精彩,请关注「seniusen」!

转载于:https://www.cnblogs.com/seniusen/p/10926308.html

LeetCode 103——二叉树的锯齿形层次遍历相关推荐

  1. LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)

    103. 二叉树的锯齿形层次遍历 103. Binary Tree Zigzag Level Order Traversal 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再 ...

  2. LeetCode 103. 二叉树的锯齿形层次遍历(BFS / 双栈)

    1. 题目 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7] ...

  3. leetcode 103. 二叉树的锯齿形层次遍历

    给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3/ \ ...

  4. Leetcode 103. 二叉树的锯齿形层次遍历 解题思路及C++实现

    解题思路: 因为是逐层的访问,在访问某一层的节点时,需要将其子节点push进栈,所以自然而然地想到用两个栈a和b.因为是锯齿形的访问顺序,所以,如果将根节点当做第一层,奇数层与偶数层的进栈区别在于:奇 ...

  5. 103. 二叉树的锯齿形层次遍历/102. 二叉树的层序遍历

    2020-05-24 1.题目描述 二叉树的锯齿形层次遍历 2.题解 对于层次遍历而言,就是广度优先,由于题目要求奇数层逆序,我们可以 1)使用双端队列,奇偶性不同,则出入队列方式不同. 2)对于偶数 ...

  6. 【Leetcode】103. 二叉树的锯齿形层次遍历

    题目 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 ...

  7. 【LeetCode】103# 二叉树的锯齿形层次遍历

    题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], ...

  8. 103.二叉树的锯齿形层次遍历:DFS解法

    Time: 20190830 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,n ...

  9. 103. 二叉树的锯齿形层次遍历

    给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3   ...

  10. Leetcode 103.二叉树的锯齿形层序遍历

    难度:中等 频率:136 题目: 给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 解题方法:改进的BPS[广度优先搜索] BP ...

最新文章

  1. 新建域用户添加提示密码策略受限
  2. 计算机英语基础性考任务三,(2021更新)国家开放大学电大《计算机应用基础》形考任务3作业3试题及答案...
  3. mysql同步 触发器_mysql 触发器(数据库的同步)
  4. JDBC修改数据库(Object类的应用)
  5. 阿里云 AI 编辑部获 CCBN 创新奖,揭秘传媒行业解决方案背后的黑科技
  6. java 泛型 class t_java 泛型中classT 和T的区别是什么?
  7. python multiprocessing.Semaphore应用
  8. [Java] 蓝桥杯ADV-155 算法提高 上帝造题五分钟
  9. Linux内核等待队列wait_queue学习
  10. oracle判断字符串以什么开头_sql语句判断字符串以什么什么开头
  11. DIALOGBOXPARAMA
  12. python依赖包冲突
  13. 好用的软件网址(不一定是官网,不定时更新)
  14. 怎么清楚计算机硬盘搜索记录,如何去除电脑硬盘删除痕迹
  15. 2018.10.29-dtoj-4007-飞天鼠小E
  16. 《疯狂原始人》温馨而搞笑片段截图
  17. 【报告分享】2021巨量引擎日化行业年度报告-巨量算数(附下载)
  18. Linux gzip压缩输出
  19. Redhat 7 安装 iftop软件
  20. 群晖7.0 mailplus 提示用户权限不足

热门文章

  1. 纯命令版饥荒安装教程-自己使用
  2. 日语专业双学位选计算机,湖北师范大学计算机科学与技术(日语双学位)专业2015年在湖北理科高考录取最低分数线...
  3. 【Java程序设计】异常处理
  4. JVM stack与Heap的区别
  5. Opencv_HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP解决方案
  6. Android ADB命令?这一次我再也不死记了!【简单说】
  7. python多线程与多进程
  8. 2018 noip 考前临死挣扎
  9. 【mybatis】 mybatis在mysql 更新update 操作 更新时间字段按照年月日时分秒格式 更新为当前时间...
  10. CentOS 6 安装最新的 Redis 2.8 ,安装 TCMalloc