【LeetCode刷题笔记】103. 二叉树的锯齿形层序遍历

news2025/2/25 21:53:07

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多算法知识专栏:算法分析🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述
LeetCode题解专栏:【LeetCode刷题笔记】


目录

  • 题目链接
  • 一、题目描述
  • 二、示例
  • 三、题目分析
  • 四、代码实现(C++)

题目链接

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

一、题目描述

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

二、示例

示例 1:

在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[ [3],[20,9],[15,7] ]

三、题目分析

二叉树的层序遍历链接: 【LeetCode刷题笔记】102. 二叉树的层序遍历

锯齿形层序遍历的解法基于普通的层序遍历基础上:

二叉树的层序遍历:使用队列将每层节点入队,再根据该层数量(queue.size())控制遍历

锯齿形层序遍历就是对层序遍历再多加个约束条件:一层正常遍历,一层将遍历后的结果插入到上个数据前面

(反方向遍历实现方法:将数据从队列弹出后,每次添加到结果数组中,添加的位置在前 就实现了从右向左输出)

在这里插入图片描述

因此只需要控制哪一层正常遍历,哪一层反方向遍历即可:使用一个bool标记位,每遍历一层后控制反向遍历

四、代码实现(C++)

/**
 * 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) {
        vector<vector<int>> res;	//返回结果:二维数组
        queue<TreeNode*> qe;		//打印队列
        if(root==nullptr)return res;
        qe.push(root);				//将根节点入队
        bool ji = true;				//控制遍历方向的标记位
        while(!qe.empty())			//是否还有节点未处理
        {
            int size = qe.size();	//本层节点个数 用于控制本层 内循环
            vector<int> level;		//每层的打印结果
            for(int i=0;i<size;i++)
            {
                TreeNode* cur = qe.front();
                if(ji)
                {
                	//正向遍历:在数组尾部添加节点数据
                    level.push_back(cur->val);
                    qe.pop();
                }
                else
                {
                	//反方向遍历:将遍历后的结果插入到上个数据前面就实现了反向遍历
                    level.insert(level.begin(),cur->val);
                    qe.pop();
                }
                if(cur->left)qe.push(cur->left);	//左孩子入队
                if(cur->right)qe.push(cur->right);	//右孩子入队
            }
            ji=!ji;		//每层处理完后将标记位置为反
            res.push_back(level);	//将每层结果放入二维数组结果中
        }
        return res;		//返回二维数组结果
    }
};

在这里插入图片描述


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!
如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1278768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】 堆排序与TopK问题详解

在学习完堆的创建后&#xff0c;就轮到了标题的两个问题 这两个问题在实际生活中会有比较强的实际问题解决能力 先分别解释一下 堆排序&#xff1a; 运用堆的思想进行排序&#xff0c;时间复杂度为O(NlogN)TopK&#xff1a; 从一大堆数据中选择K个最大或最小的数据&#xff0c…

oj赛氪练习题

数组调整 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int k scanner.nextInt();int[] arr new int[n];for (int i 0; i < n; i) {arr[i] scanner.nextIn…

充电桩自检流程

1、常规自检流程介绍 充电桩自检流程通常包括以下几个方面&#xff1a; 外观检查&#xff1a;检查充电桩外观是否完好&#xff0c;无损坏、严重污染等问题。连接检查&#xff1a;检查充电桩与电源的连接是否牢固&#xff0c;线缆是否完整无损。安全性检查&#xff1a;检查充电…

750mA Linear Charger with Power Path Management

一、General Description YHM2711 is a highly integrated, single-cell Li-ion battery charger with system power path management for space-limited portable applications. The full charger function features Trickle-charge, constant current fast charge and const…

Upsert 及冲突(GORM)

GORM支持了数据库的upsert操作 upsert操作对于插入一条数据而言的&#xff0c;如果插入数据之前&#xff0c;没有这条数据&#xff0c;则会插入该条数据&#xff1b;如果插入数据之前就存在这条数据&#xff08;索引值&#xff09;&#xff0c;就更新这条记录。 创建结构体 …

tar文件覆盖漏洞 CVE-2007-4559

文章目录 前言原理例题 [NSSRound#7 Team]新的博客方法一 手搓文件名方法二 python脚本 前言 做到[NSSRound#6 Team]check(Revenge)时发现是tar文件覆盖&#xff0c;但是对概念和执行过程理解不够深就光光记住脚本&#xff0c;所以在做本题[NSSRound#7 Team]新的博客时打算重新…

Linux中的文件IO

文章目录 C语言文件操作系统文件I/O接口介绍 open函数返回值文件描述符fd0 & 1 & 2文件描述符的分配规则 重定向使用 dup2 系统调用 FILE理解文件系统理解硬链接软链接acm 动态库和静态库静态库与动态库生成静态库生成动态库&#xff1a; C语言文件操作 先来段代码回顾…

DouyinAPI接口系列丨Douyin商品详情数据接口丨Douyin视频详情数据接口

抖音商品详情API是抖音开放平台提供的一套API接口&#xff0c;用于获取商品详情信息。通过该API&#xff0c;开发者可以获取到商品的详细信息&#xff0c;包括商品ID、名称、描述、价格、销量、评价等信息。 在使用抖音商品详情API之前&#xff0c;需要先注册并登录抖音开放平…

【Linux】基本指令(上篇)

这里是目录 前言ls指令pwd指令mkdir指令&#xff08;重要&#xff09;tree指令cd指令结合 touch指令rmdir指令&#xff08;重要&#xff09;rm指令&#xff08;重要&#xff09;*通配符man指令&#xff08;重要&#xff09;echo指令cat指令cp指令&#xff08;重要&#xff09;拷…

Linux系统之部署Plik临时文件上传系统

Linux系统之部署Plik临时文件上传系统 一、Plik介绍1.1 Plik简介1.2 Plik特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、下载Plik软件包4.1 创建下载目录4.2 下载Plik软件包4.3 查看下载的Plik软件…

<JavaEE> volatile关键字 -- 保证内存可见性、禁止指令重排序

目录 一、内存可见性 1.1 Java内存模型(JMM) 1.2 内存可见性演示 二、指令重排序 三、关键字 volatile 一、内存可见性 1.1 Java内存模型(JMM) 1&#xff09;什么是Java内存模型&#xff08;JMM&#xff09;&#xff1f;Java内存模型即Java Memory Model&#xff0c;简…

大数据读本:暴雨以数字技术助力传统产业数字化转型

发展数字经济&#xff0c;产业数字化是重要引擎。暴雨作为数字经济的领军企业&#xff0c;近年来积极利用数字技术对传统产业进行全方位、全角度、全链条的改造&#xff0c;提高要素生产率&#xff0c;释放数字对经济发展的放大、叠加、倍增作用。在农业产业化方面&#xff0c;…

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的&#xff0c;随着现代技术科技手段的不断发展&#xff0c;基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段&#xff0c;本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…

基于卷积神经网络的肺炎影像分类分割智能诊断系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 肺炎是一种常见的呼吸系统感染疾病&#xff0c;其主要病因包括细菌、病毒和真菌等。肺炎的早期诊断对于患者的治疗和预后至关重要。传统的肺炎诊断方…

Your anti-virus program might be impacting your build performance

Your anti-virus program might be impacting your build performance.解决方案 在使用 AndroidStudio 时&#xff0c;经常会弹出框提示&#xff1a;Your anti-virus program might be impacting your build performance. Android Studio checked the following directories: …

Java高级技术-反射

认识反射、获取类 获取类的方法 获取类的构造器 获取类的构造器、并对其进行操作 获取构造器的作用&#xff1a;依然是初始化对象返回 获取成员变量 获取成员变量的方法 获取成员变量的作用&#xff1a;赋值、取值 获取类的成员方法 方法 作用&#xff1a;依然是执行 作用、…

每日一练2023.12.2——正整数A+B【PTA】

题目链接&#xff1a;L1-025 正整数AB 题目要求&#xff1a; 题的目标很简单&#xff0c;就是求两个正整数A和B的和&#xff0c;其中A和B都在区间[1,1000]。稍微有点麻烦的是&#xff0c;输入并不保证是两个正整数。 输入格式&#xff1a; 输入在一行给出A和B&#xff0c;…

Wireshark使用详解

wireshark简介 wireshark是捕获机器上的某一块网卡的网络包&#xff0c;当你的机器上有多块网卡的时候&#xff0c;你需要选择一个网卡。   wireshark能获取HTTP&#xff0c;也能获取HTTPS&#xff0c;但是不能解密HTTPS&#xff0c;所以wireshark看不懂HTTPS中的内容&#…

强化学习(一)——基本概念及DQN

1 基本概念 智能体 agent &#xff0c;做动作的主体&#xff0c;&#xff08;大模型中的AI agent&#xff09; 环境 environment&#xff1a;与智能体交互的对象 状态 state &#xff1b;当前所处状态&#xff0c;如围棋棋局 动作 action&#xff1a;执行的动作&#xff0c;…

Swagger——接口文档自动生成和测试

目录 1 介绍2 使用步骤 1 介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是&#xff1a; 使得前后端分离开发更加方便&#xff0c;有利于团队协作 接口的文档在线自动生成&…