二叉树的锯齿形层序遍历

简介: 🎈今天给大家带来的是算法练习,题目为"二叉树的锯齿形层序遍历"。

说在前面

🎈今天给大家带来的是算法练习,题目为"二叉树的锯齿形层序遍历"。

问题描述

给你二叉树的根节点 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

思路分析

这道题目也是树的遍历衍生出来的一道题目,所谓的锯齿形层序遍历其本质上还是层序遍历,只要知道层序遍历的写法,其实这道题目也是不难的,所以先让我们来回顾一下二叉树的层序遍历。

二叉树层序遍历

层序遍历就是以层为遍历顺序,先把第一层的节点遍历完再遍历第二层的节点,遍历顺序如下图所示:

1650465699(1).png
二叉树的层序遍历主要是利用队列的先入先出思想进行解题,把每一层节点的子节点按顺序入队,那么出队的节点就是二叉树层序遍历的结果了。
关于层序遍历的题目我之前也有写过一篇博客,不了解的可以先到这里看看-> N 叉树的层序遍历

二叉树锯齿形遍历

锯齿形遍历也是层序遍历,其遍历顺序如下图:

1650466025(1).png
由上图可以看出,我们只需要将层序遍历的某些层遍历结果翻转过来就可以了,如本题,我们只需要将层级为奇数的层遍历结果翻转过来保存到结果集里即可。

  • 使用队列保存节点集
  • 根据层级判断是否需要翻转
  • 一层遍历完将本层结果翻入结果集合

具体代码如下:

AC代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var zigzagLevelOrder = function(root) {
    let queue = [{r:root,floor:0}];
    let nowFloor = 0;
    let res = [];
    let temp = [];
    while(queue.length){
        let q = queue.shift();
        if(!q.r) break;
        if(nowFloor != q.floor){
            res.push([...temp]);
            nowFloor = q.floor;
            temp = [];
        }
        q.floor % 2 == 0 ? temp.push(q.r.val) : temp.unshift(q.r.val);
        if(q.r.left) queue.push({r:q.r.left,floor: q.floor + 1});
        if(q.r.right) queue.push({r:q.r.right,floor: q.floor + 1});
    }
    if(temp.length) res.push([...temp]);
    return res;
};

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
4月前
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
5月前
|
人工智能 自然语言处理 数据可视化
通义灵码保姆级教程:从数据读取、清洗、结合大模型分析、可视化、生成报告全链路
本课程通过通义灵码实现零代码数据分析全流程,涵盖数据读取、清洗、可视化、报告生成及内容仿写,无需编程基础,轻松掌握从CSV导入到PDF报告输出的实战技能。
|
存储 监控 固态存储
在高并发环境下,如何优化 WAL 的写入性能?
在高并发环境下,如何优化 WAL 的写入性能?
233 2
|
4月前
|
传感器 人工智能 安全
AI Agent架构全览:从LLM大脑到工具四肢的自主进化之路
人工智能正从工具时代迈向智能体时代,AI Agent作为核心载体,具备感知、决策与行动能力,能自主完成复杂任务。本文详解其工作原理与架构,探讨未来发展与挑战。
|
10月前
|
机器学习/深度学习
YOLOv11改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
YOLOv11改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
782 8
YOLOv11改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
|
11月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
12月前
|
人工智能 API 数据库
Qwen-Agent功能调用实践探索
本文详细解析了Qwen-Agent的核心功能——功能调用,涵盖其定义、工作流程、重要性和实际应用,通过实例展示了如何在Qwen-Agent中利用此功能与外部工具和API互动,扩展AI应用范围。