Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【一天一大 lee】二叉树的锯齿形层序遍历 (难度:中等) - Day20201222

【一天一大 lee】二叉树的锯齿形层序遍历 (难度:中等) - Day20201222

作者头像
前端小书童
发布于 2021-01-05 02:16:58
发布于 2021-01-05 02:16:58
28700
代码可运行
举报
文章被收录于专栏:前端小书童前端小书童
运行总次数:0
代码可运行

20201222

题目:

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

例如:给定二叉树 [3,9,20,null,null,15,7],

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    3
   / \
  9  20
    /  \
   15   7

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  [3],
  [20,9],
  [15,7]
]

抛砖引玉

关于二叉树的按层遍历之前已经做过类似的题目:

二叉树的层序遍历二叉树的层次遍历 II

广度优先搜索(BFS)按层遍历模板:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let _result = [],
    queue = []
if (root == null) return []
queue.push(root)
while (queue.length) {
    let len = queue.length,
        levelNodes = []
    for (let i = 0; i < len; i++) {
        let node = queue.shift()
        levelNodes.push(node.val)
        if (node.left) {
            queue.push(node.left)
        }
        if (node.right) {
            queue.push(node.right)
        }
    }
    _result.push(levelNodes)
}
return _result

取二叉树节点放到队列中,每次遍历队列(清空队列)将队列中节点取出,节点值存放到新数组中, 再将取出的节点的子节点放入队列中。

抛砖引玉

本题中要求遍历顺序,每次顺序与上一次想法,则可以通过已经遍历的层数的奇偶来切换该层元素的排列顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var zigzagLevelOrder = function(root) {
    let _result = [],
        queue = []
    if (root == null) return []
    queue.push(root)
    while (queue.length) {
        let len = queue.length,
            levelNodes = []
        for (let i = 0; i < len; i++) {
            let node = queue.shift()
            levelNodes.push(node.val)
            if (node.left) {
                queue.push(node.left)
            }
            if (node.right) {
                queue.push(node.right)
            }
        }
        // 根据已遍历的层数切换元素的排列顺序
        _result.length % 2
            ? _result.push(levelNodes.reverse())
            : _result.push(levelNodes)
    }
    return _result
}

博客: 前端小书童

每天的每日一题,写的题解会同步更新到公众号一天一大 lee 栏目 欢迎关注留言

公众号:前端小书童

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
103. 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7] c
编程张无忌
2021/07/20
1900
103. 二叉树的锯齿形层序遍历
103. 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
张伦聪zhangluncong
2022/10/26
1990
【一天一大 lee】二叉树的前序遍历 (难度:中等) - Day20201027
20201027 题目: 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 抛砖引玉 思路: 深度优先遍历(DFS) 递归遍历二叉树 推送结果数组的顺序:根节点->左节点->右节点 抛砖引玉 /** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * t
前端小书童
2020/11/03
2470
【一天一大 lee】二叉树的前序遍历 (难度:中等) - Day20201027
一天一大 lee(二叉树的层次遍历 II)难度:简单-Day20200906
给定一个二叉树,返回其节点值自底向上的层次遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
前端小书童
2020/09/24
3720
一天一大 lee(二叉树的层次遍历 II)难度:简单-Day20200906
【一天一大 lee】完全二叉树的节点个数 (难度:中等) - Day20201124
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~
前端小书童
2020/12/03
4630
【一天一大 lee】完全二叉树的节点个数 (难度:中等) - Day20201124
【一天一大 lee】填充每个节点的下一个右侧节点指针 (难度:中等) - Day20201015
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
前端小书童
2020/11/03
2520
【一天一大 lee】填充每个节点的下一个右侧节点指针 (难度:中等) - Day20201015
Leetcode No.103 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
week
2021/11/29
1950
一天一大 lee(二叉树的层平均值)难度:简单-Day20200912
从根节点开始遍历,遍历一个元素就将其从queue中取出,将其下一层放入queue中待下次遍历
前端小书童
2020/09/24
3100
一天一大 lee(二叉树的层平均值)难度:简单-Day20200912
JavaScript刷LeetCode拿offer-二叉树层序遍历篇
博主最近在刷leetcode,做到二叉树套题的时候发现很多题的解题思路都是基于二叉树的层序遍历来完成的,因此写下这篇文章,记录一下二叉树层序遍历这件"神器"在实战的运用。
hellocoder2028
2022/10/31
2400
102. 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 「层序遍历」 。(即逐层地,从左到右访问所有节点)。
chuckQu
2022/08/19
4010
LeetCode57|二叉树的锯齿形层次遍历
写了一年的文章了,整体输出文章内容基本上都是以java为主,大概篇幅内容都是围绕着数据库,JDK源码,mybatis,spring,springboot的框架来进行输出的,一年有所成长,有所失去,快到十一了,去年也是十一的时候开始了文章输出的,一年的时间过得好快啊
码农王同学
2020/09/21
2970
LeetCode57|二叉树的锯齿形层次遍历
【一天一大 lee】路径总和 II (难度:中等) - Day20200926
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
前端小书童
2020/09/29
3600
leetcode 每日一题:103.二叉树的锯齿形层序遍历
leetcode 每日一题:103.二叉树的锯齿形层序遍历:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
用户7685359
2020/12/23
6130
【栈与队列】N叉树的层序遍历 && 二叉树的锯齿形层序遍历
​ 这道题其实就是 二叉树的层序遍历 的变形,只不过将其左右孩子改成了一个数组来存放孩子节点罢了,我们只需要遍历一下数组即可,其它思路都是一样的,就是使用队列的先进先出特点,每次处理一层,然后根据队列的元素个数控制每层遍历d
利刃大大
2025/02/23
770
【栈与队列】N叉树的层序遍历 && 二叉树的锯齿形层序遍历
【一天一大 lee】二叉树的后序遍历 (难度:中等) - Day20200929
题目: 给定一个二叉树,返回它的 后序 遍历。 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过
前端小书童
2020/09/30
6410
LeetCode 103. 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
手撕代码八百里
2020/07/28
3940
LeetCode 103. 二叉树的锯齿形层次遍历
二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
狼啸风云
2024/01/28
1470
【一天一大 lee】 合并二叉树 (难度:简单)-Day20200923
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
前端小书童
2020/09/29
5730
“二叉树的最大深度”,竟然有3家大厂在考这道算法题...
最近至少有3个朋友在字节、小红书、蚂蚁的前端面试中遇到了同一道算法题,二叉树的最大深度...
前端胖头鱼
2024/03/14
1260
“二叉树的最大深度”,竟然有3家大厂在考这道算法题...
打卡群2刷题总结1010——二叉树的层序遍历
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
木又AI帮
2020/10/30
3320
推荐阅读
相关推荐
103. 二叉树的锯齿形层序遍历
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验