注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。

描述

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


示例:

二叉树:[3,9,20,null,null,15,7],

    3/ \9  20/  \15   7

返回锯齿形层序遍历如下:

[[3],[20,9],[15,7]
]

解题思路

这道题只需要在层序遍历法的结果的基础上,使用一个布尔类型的变量,判断这一层的节点值是否需要反转即可。每次统计完这层节点值后,将其取反。

当然,你也可以根据所在层数的奇偶进行判断。本人使用的是布尔变量进行的判断。

点击链接即可查看二叉树层序遍历算法的详解 力扣题目——102. 二叉树的层序遍历

层序遍历代码

var levelOrder = function(root) {// 用于存放最后结果的数组let result = []// 初始化队列,若 root 为 null,则队列直接为[], 不进行 while 循环,直接返回resultlet queue = root ? [root] : []// 只要队列中存在元素,则遍历,若不存在元素,说明树已经遍历完毕,退出while(queue.length !== 0){// 存放每一层元素let temp = []// 遍历 len 个元素,即遍历这一层的所有元素for(let i = 0, len = queue.length; i < len; i++){let node = queue.shift()temp.push(node.val)// 只有不为空的时候,才需要将子节点 push 到队列中if(node.left) queue.push(node.left)if(node.right) queue.push(node.right)}result.push(temp)}return result
};

这道题目的代码

var zigzagLevelOrder = function(root) {let queue = root === null ? [] : [root]let result = []// 创建布尔变量,以在后面判断是否需要反转某一层的节点值// 因为第一层不需要反转,第二层需要,所以初始为 falselet isReverse = falsewhile(queue.length !== 0){let temp = []for(let i = 0, len = queue.length; i < len; i ++){let node = queue.shift()temp.push(node.val)if(node.left) queue.push(node.left)if(node.right) queue.push(node.right)}// 根据 isReverse 的值判断是否反转if(isReverse) temp = temp.reverse()isReverse = !isReverseresult.push(temp)}return result
};

力扣题目——103. 二叉树的锯齿形层序遍历相关推荐

  1. LeetCode Algorithm 103. 二叉树的锯齿形层序遍历

    103. 二叉树的锯齿形层序遍历 Ideas 首先得理解二叉树的层序遍历,它类似于广度优先搜索,在当前层搜索的时候,遍历到的每一个节点都要把它的所有孩子节点都添加到队列中. 然后我们要锯齿形遍历,可以 ...

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

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

  3. Leetcode 103. 二叉树的锯齿形层序遍历 (每日一题 20210924)

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

  4. c++二叉树的层序遍历_leetcode 103. 二叉树的锯齿形层序遍历

    按层次遍历,记录下对应节点的val和所在层,然后经过一定变换得到输出.python代码如下: # Definition for a binary tree node.# class TreeNode( ...

  5. 二叉树的锯齿形层序遍历

    Leetcode:103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) (leetcode-cn.com) 还是层序遍历的问题,只不过这里需要注意层数,从而选择是正序访问还是倒序访问. 时间 ...

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

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

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

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

  8. 【数据结构与算法】之深入解析“二叉树的锯齿形层序遍历”的求解思路与算法示例

    一.题目要求 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 示例 1: 输入:root = [3,9,20 ...

  9. 【LeetCode】0103.二叉树的锯齿形层序遍历

    题目要求 返回其节点值的锯齿形层序遍历(也就是,如果第一层遍历顺序时从左到右,第二次遍历顺序就要从右到左,依次类推) 图解示例 算法思想 方法一:使用广度优先搜索 + 调整结果 本题比较简单的办法就是 ...

最新文章

  1. ACM寒假训练第二周总结
  2. 关于安防与大数据不能不说的九个发展趋势
  3. 延迟反馈带来的样本偏差如何处理
  4. 光电数字直接式中高压电力电能表
  5. Scala range reverse debug
  6. java中计算平均成绩_Java计算平均成绩
  7. mybatisplus page排序_MyBatisPlus分页的同时指定排序规则说明
  8. 亲测!Jquery2.0不支持IE8-了
  9. 清除Outlook 2013中缓存的邮件地址
  10. 图片轮播的JS写法,通用涉及多个轮播
  11. springboot mybatis如何打印出查询语句_Java 面试,如何坐等 offer?
  12. 大数据面试题——用shell打印200以内的质数
  13. 搭建sip软电话环境
  14. 泛克里金方法的实际应用——小试牛刀
  15. 停课不停学,腾讯云助力在线教育!
  16. 热更新Tinker的集成使用
  17. 不同的声音-我为什么反对用Node
  18. 赶紧入手,python面试题之Python如何实现单例模式?
  19. 如何成为一名技术专家
  20. php微信地图定位导航,网页拉取微信内置地图(openLocation)详细教程 轻松实现一键导航 – 蓝洛水深...

热门文章

  1. Java类变量和类方法详解
  2. R2: 相关系数、复相关系数及半偏相关系数之间的联系
  3. 一家公司的几道笔试题
  4. andorid 录音去噪音
  5. 对棋盘完美覆盖问题证明过程的质疑及其解决
  6. oracle 二级排序,Oracle基础(二)之排序(order by)、限定查询(where)
  7. Linux系统中DHCP的配置
  8. bootstrap-pagination demo
  9. 关于java mail 发邮件的问题总结(转)
  10. 使用Ext.grid.Panel生成表格