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

广度优先搜索

  • 思路:
    • 需要逐层遍历结果,通过广度优先搜索即可;
      • 使用 queue,初始将 root push 进入 queue;
      • 逐层搜索,直到 queue 为空;
        • queue 里为当前层节点元素,一次循环处理:
          • 取 queue front 元素,之后 pop 丢弃;
          • 拿到元素之后根据需求进行处理;
          • 将当前节点左右节点(如果存在的话)压入队列作为下一层;
    • 每一层需要调换顺序遍历节点,可以使用一个变量来记录当前顺序,第一层(root)从左往右,后续每遍历完一层之后,变换一次顺序;
    • 遍历的节点需要根据顺序进行反转,可以使用一个双端队列 deque 来存储,遍历完之后再转成 vector;
/*** 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) {std::vector<std::vector<int>> result;if (nullptr == root) {return result;}std::queue<TreeNode*> qu;qu.push(root);bool isOrderLeft = true;while (!qu.empty()) {std::deque<int> levelList;int size = qu.size();for (int i = 0; i < size; ++i) {auto node = qu.front();qu.pop();if (isOrderLeft) {levelList.push_back(node->val);} else {levelList.push_front(node->val);}if (node->left) {qu.push(node->left);}if (node->right) {qu.push(node->right);}}result.emplace_back(std::vector<int>{levelList.begin(), levelList.end()});isOrderLeft = !isOrderLeft;}return result;}
};

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

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

相关文章

酿酒生产废水处理设备如何选型

选型酿酒生产废水处理设备是确保废水处理过程高效稳定的关键步骤。酿酒生产过程中&#xff0c;产生的废水中含有大量有机物和悬浮物&#xff0c;因此需要选择适合的设备来进行处理。 首先&#xff0c;要根据酿酒生产废水的特点进行选型。酿酒废水的主要特点是&#xff1a;水量较…

uni-app使用uni-ui加ts类型限制

uni-app使用uni-ui加ts类型限制 安装 uni-ui 组件库 pnpm i dcloudio/uni-ui配置自动导入组件 // pages.json {// 组件自动导入"easycom": {"autoscan": true,"custom": {// uni-ui 规则如下配置 "^uni-(.*)": "dcloudio/uni…

phpstorm配置ftp

1 选择设置ftp 2设置自动上传

分享两个概念:非受检异常和受检异常

分享两个概念&#xff1a;非受检异常和受检异常 愿你的每一天都充满阳光和笑声&#xff0c;愿每一步都是轻松与愉快。在新的旅程中&#xff0c;愿你找到勇气攀登高峰&#xff0c;找到智慧化解困境。 愿你的心中充满温暖和善意&#xff0c;愿你的梦想如彩虹般美丽且真实。愿你发…

阿里云ECS服务器安装了数据库,nginx 等,已经启动,但是浏览器,navicat 访问不了

目录 1 问题2 实现 1 问题 阿里云ECS服务器安装了数据库&#xff0c;nginx 等&#xff0c;已经启动&#xff0c;但是浏览器&#xff0c;navicat 访问不了&#xff1b; 防火墙也关闭了&#xff0c;使用命令已经进入数据库了&#xff0c;说明数据库已经安装成功了&#xff0c;但…

Android开发基础(一)

Android开发基础&#xff08;一&#xff09; 本篇主要是从Android系统架构理解Android开发。 Android系统架构 Android系统的架构采用了分层的架构&#xff0c;共分为五层&#xff0c;从高到低分别是Android应用层&#xff08;System Apps&#xff09;、Android应用框架层&a…

Python实现PDF—>Excel的自动批量转换(附完整代码)

Python实现PDF—>Excel的自动批量转换&#xff08;附完整代码&#xff09; 话不多说&#xff0c;先看效果&#xff01; 需要转换的PDF&#xff1a; 转换后的Excel&#xff1a; 01、底层原理 PDF 到 Excel 的转换涉及不同文件格式之间的数据提取和重构。底层原理可以简…

Flask 菜品管理

common/libs/Helper.py getDictFilterField() 方法 用于在web/templates/food/index.html中展示菜品分类 如何能够通过food里面的cat_id获取分类信息呢&#xff1f;只能通过for循环&#xff0c;这样会很麻烦&#xff0c;所以定义了这个方法。 这个方法可以的查询返回结果…

linux 01 centos镜像下载,服务器,vmware模拟服务器

https://www.bilibili.com/video/BV1pz4y1D73n?p3&vd_source4ba64cb9b5f8c56f1545096dfddf8822 01.使用的版本 国内主要使用的版本是centos 02.centos镜像下载 这里的是centos7 一.阿里云官网地址&#xff1a;https://www.aliyun.com/ 二. -----【文档与社区】 —【…

CSND修改付费专栏价格

人工客服在个人中心右下角可以找到 客服回复已订阅专栏不支持修改价格

师傅带练|在线实习项目,提供实习证明

八大项目&#xff1a;某实习网站招聘信息采集与分析&#xff08;Python数据采集与分析&#xff09; 股票价格形态聚类与收益分析&#xff08;Python金融分析&#xff09; 某平台网络入侵用户自动识别&#xff08;Python机器学习&#xff09; 某平台广东省区采购数据分析&…

Vue项目nginx部署到线上,访问时加前缀解决方案

一、业务场景&#xff1a; 最近项目开发完了&#xff0c;需要部署一个测试版本和正式版本到线上&#xff0c;测试版本前面需要加一个dev前缀&#xff0c;遇到了一些坑&#xff0c;分享给大家 二、目前效果 三、具体实现步骤&#xff1a; &#xff08;1&#xff09;实现静态文…

【SEO优化】之html语义化标签

ChatGPT4.0国内站点&#xff1a;海鲸AI HTML语义化标签是指那些具有明确含义或者能够清晰描述其代表内容或功能的标签。使用语义化标签不仅能够使网页的结构更加清晰&#xff0c;而且有助于搜索引擎优化&#xff08;SEO&#xff09;&#xff0c;并且提升网站的可访问性&#xf…

构建安全可靠的系统:第二十一章到附录 A

第二十一章&#xff1a;建立安全和可靠性文化 原文&#xff1a;21. Building a Culture of Security and Reliability 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Heather Adkins 与 Peter Valchev&#xff0c;Felix Grbert&#xff0c;Ana Oprea…

【数据库】简单聊聊数据库可以做什么,有什么用?

随着云计算和大数据的兴起&#xff0c;数据库的作用日益突出&#xff0c;因此了解什么是数据库&#xff0c;数据库可以做什么&#xff0c;有什么用是非常必要的。今天我们就来简单聊聊。 数据库是什么&#xff1f; 数据库是一个组织化的数据集合&#xff0c;用于存储大量的结…

艾思控AQMD6008BLS-TE无刷电机驱动使用笔记(配合STM32)

一、介绍 本驱动器使用的电机电流精确检测技术、有感无刷电机自测速、有感无刷电机转动位置检测、再生电流恒电流制动&#xff08;或称刹车&#xff09;技术和强大的PID调节技术可地控制电机平稳正反转、换向及制动&#xff0c;输出电流实时调控防止过流&#xff0c;精准控制电…

GC2804——GC2803 的升级,12V H桥驱动,8 个NPN达林顿晶体管,采用SSOP24 封装,应用于安防步进电机驱动产品上

GC2804 是 GC2803 的升级&#xff0c;在内部集成了 8 个 NPN 达林顿晶体管连接阵列的基础上&#xff0c;又集成了一路 12V 的 H 桥驱动。8 个 NPN 达林顿阵列用来驱动高压的步进电机&#xff0c;H 桥驱动可以用来驱动 IR-CUT&#xff0c;此芯片专用于安防摄像头系统方案。该 GC…

十分钟部署清华 ChatGLM-6B,实测效果超预期(Linux版)

前段时间&#xff0c;清华公布了中英双语对话模型 ChatGLM-6B&#xff0c;具有60亿的参数&#xff0c;初具问答和对话功能。 最&#xff01;最&#xff01;最重要的是它能够支持私有化部署&#xff0c;大部分实验室的服务器基本上都能跑起来。因为条件特殊&#xff0c;实验室网…

判断两个对象某些字段的值是否相同

1、借助mybatis plus的方法 import com.baomidou.mybatisplus.core.toolkit.LambdaUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda; import lombok.SneakyThrows; import o…

QObject_event

QObject::event QObject事件入口&#xff0c;所有事件的处理入口都是QObject::event和其子类的event函数 bool MyQObject::event(QEvent *e){//处理不同的事件......//处理不了的传给父对象处理return QObject::event(e); }bool QObject::event(QEvent *e) {switch (e->ty…