C++ 队列

目录

队列的应用场景 

1、429. N 叉树的层序遍历

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

3、662. 二叉树最大宽度

4、515. 在每个树行中找最大值


队列的应用场景 

  1. 广度优先搜索(BFS):队列是广度优先搜索算法的核心数据结构。在BFS中,我们从根节点开始,逐层地访问节点,首先访问根节点,然后访问其所有直接子节点,然后是子节点的子节点,以此类推。队列用于按照层级顺序存储待访问的节点,确保先访问上一层的节点,然后再访问下一层的节点。

  2. 树的层次遍历:在树的层次遍历算法中,队列用于按层级顺序存储待访问的节点。这样可以确保先访问上一层的节点,然后再访问下一层的节点。

1、429. N 叉树的层序遍历

思路:队列实现广度优先搜索(dfs)。


/*
// Definition for a Node.
class Node {
public:int val;vector<Node*> children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector<Node*> _children) {val = _val;children = _children;}
};
*/class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;//存储返回结果queue<Node*> q;if (root == nullptr)//处理空树return ret;q.push(root);while (q.size()) {//某层元素个数为0则结束vector<int> tmp;//暂存当前层的元素int n = q.size();for (int i = 0; i < n; i++) {//循环处理当前层Node* s = q.front();q.pop();//弹出队列tmp.push_back(s->val);//存入暂存数组//每处理完一个元素,它的孩子节点需要入队列for (Node* child : s->children) {/if (child != nullptr)q.push(child);}}ret.push_back(tmp);//存入当前层的结果}return ret;}
};

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

 思路:队列实现广度优先搜索(dfs),偶数层进行逆置即可实现锯齿形层序遍历。

/*** 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>> ret;if (root == nullptr)return ret;queue<TreeNode*> q;int level = 1;q.push(root);while (q.size()) {int sz = q.size();vector<int> tmp;for (int i = 0; i < sz; i++) {TreeNode* t = q.front();q.pop();tmp.push_back(t->val);if (t->left)q.push(t->left);if (t->right)q.push(t->right);}if (level % 2 == 0)reverse(tmp.begin(), tmp.end());ret.push_back(tmp);level++;}return ret;}
};

3、662. 二叉树最大宽度

思路:数组模拟二叉树建堆思路,使用数组或队列统计下标并计算差值即可。

题中说题目数据保证答案将会在  32 位 带符号整数范围内,所以使用unsigned int存储下标差值。

/*** 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:int widthOfBinaryTree(TreeNode* root) {vector<pair<TreeNode*, unsigned int>> q;unsigned int ret = 0;q.push_back({root, 1});while (q.size()) {auto& x = q.front();auto& y = q.back();ret = max(ret, y.second - x.second + 1);vector<pair<TreeNode*, unsigned int>> tmp;//存储下一层for (auto& x : q) {if (x.first->left)tmp.push_back({x.first->left, x.second * 2});if (x.first->right)tmp.push_back({x.first->right, 2 * x.second + 1});}q = tmp;//更新为下一层}return ret;}
};

4、515. 在每个树行中找最大值

 思路:队列实现广度优先搜索(dfs)。

/*** 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<int> largestValues(TreeNode* root) {vector<int> ret;if (root == nullptr)return ret;queue<TreeNode*> q;q.push(root);while (q.size()) {int sz = q.size();int tmp = INT_MIN;for (int i = 0; i < sz; i++) {//便利当前层TreeNode* t = q.front();q.pop();tmp = max(tmp, t->val);//记录当前层最大值//更新当前元素的子节点到队列if (t->left)q.push(t->left);if (t->right)q.push(t->right);}ret.push_back(tmp);}return ret;}
};

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

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

相关文章

C语言:深入补码计算原理

C语言&#xff1a;深入补码计算原理 有符号整数存储原码、反码、补码转换规则数据与内存的关系 补码原理 有符号整数存储 原码、反码、补码 有符号整数的2进制表示方法有三种&#xff0c;即原码、反码和补码 三种表示方法均有符号位和数值位两部分&#xff0c;符号位用0表示“…

Linux:kubernetes(k8s)lable和selecto标签和选择器的使用(11)

通过标签是可以让我们的容器和容器之间相互认识&#xff0c;简单来说一边打了标签&#xff0c;一边使用选择器去选择就可以快速的让他们之间耦合 定义标签有两种办法&#xff0c;一个是文件中&#xff0c;一个是命令行里 我们在前几章编进文件的时候里面都有lable比如 这个就是…

rk3399使用阿里推理引擎MNN使用cpu和gpu进行benchmark,OpenCL效果不佳?

视频讲解 rk3399使用阿里推理引擎MNN使用cpu和gpu进行benchmark&#xff0c;OpenCL效果不佳&#xff1f; 背景 MNN是阿里开源的推理引擎&#xff0c;今天测试一下在rk3399平台上的benchmark怎么样&#xff1f; alibaba/MNN: MNN is a blazing fast, lightweight deep learning…

keycloak18.0.0==前后端分离项目中使用,前端react后端springboot

配置keycloak 启动keycloak18 新建一个realm,名字叫test1 新建两个client&#xff0c;一个用于前端&#xff0c;一个用于后端 第一个 react http://localhost:8081/auth/realms/test1/react/ 第二个 backend-service 在两个client下分别创建role testRole backend-servic…

可免费使用的AI平台汇总 + 常用赋能科研的AI工具推荐

赋能科研&#xff0c;AI工具助你飞跃学术巅峰&#xff01;(推荐收藏) 文章目录 赋能科研&#xff0c;AI工具助你飞跃学术巅峰&#xff01;(推荐收藏)一、可免费使用的AI平台汇总1. ChatGPT2. New Bing3. Slack4. POE5. Vercel6. 其他平台7. 特定功能平台8. 学术资源平台9. 中文…

编曲学习:钢琴编写 人性化、逻辑预制 工程音频导出

第8课 钢琴编写 人性化、逻辑预制 工程音频导出小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65e30339e4b064a8cfe56001?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 音乐创作中,有思路时可以不套学习到的公式,没有思路时可以套…

Java零基础-包机制讲解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

数据库--

数据库 你对数据库的理解 有什么数据库及数据库分类&#xff1f; 关系型数据mysql&#xff0c;Oracle&#xff0c;SQL Server&#xff0c;DB2&#xff0c;postgreSQL 非关系型数据MongoDB&#xff0c;Cassandra&#xff08;卡三zhe&#xff09;&#xff0c;redis&#xff0c;Hb…

离线数仓(六)【ODS 层开发】

前言 1、ODS 层开发 ODS层的设计要点如下&#xff1a; &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步过来的数据结构&#xff08;JSON/CSV/TSV&#xff09;。 &#xff08;2&#xff09;ODS层要保存全部历史数据&#xff0c;故其压缩格式应选择高压缩比的…

C++程序设计-第六/七/八章 运算符重载/包含与继承/虚函数和多态性【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门&#xff1a; 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函…

训练保存模型checkpoint时报错SyntaxError: invalid syntax

在使用pytorch训练保存checkpoint时&#xff0c;出现如下报错&#xff1a; rootautodl-container-745411b452-c5cebfed:~/kvasir-seg-main# python train_transunet.py --loss_function"IoULoss" --training_augmentation0File "train_transunet.py", lin…

Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 前言 1 基础知识回顾 1.1 线程的创建和启动 1.2 线程池的使用 2.运行环境说…

Shell常用脚本:文件或目录一键同步到多台服务器

注意&#xff1a; 将本地文件&#xff0c;同步到【/opt/module/script/xsyncByFileIp.txt】里面的目标机器 xsyncByFile.sh #!/bin/bash# 入参参数个数 argsCount$#if(($argsCount0)); thenecho "同步失败&#xff1a;请输入待同步的文件或者目录" exit; fiecho &q…

Java8中,如何使用jni调用C++的dll

下面是在Java 8中使用JNI调用C的DLL的步骤清单&#xff1a; 编写C代码&#xff0c;创建动态链接库&#xff08;DLL&#xff09;&#xff1a; #include <jni.h> #include <iostream> #include "org_ming_jni_MyNativeImplementation.h" // com_example_…

记一次因为共享缓存导致流水号重复的问题排查过程

背景&#xff1a; 在开发日终应用或者跑批应用的时候&#xff0c;进行每天凌晨跑批或者全天跑批多次进行表数据清理的时候&#xff0c;每次清理都会登记操作明细到日志表&#xff0c;流水号是根据Oracle号段模式获取1000个流水号段放内存里&#xff0c;不够用再从数据库重新获取…

BetterDisplay for mac V2.2.5 强大的mac显示器管理开源工具

BetterDisplay是Mac OS 一个很棒的工具&#xff01; 它允许您将显示器转换为完全可扩展的屏幕 管理显示器配置覆盖 允许亮度和颜色控制 提供 XDR/HDR 亮度升级&#xff08;Apple Silicon 和 Intel Mac 上兼容的 XDR 或 HDR 显示器的额外亮度超过 100% - 多种方法可用&#x…

cas_ssl

第一步 生成证书&#xff1a; keytool -genkey -alias castest -keyalg RSA -keystore e:/mykey/testkey 使用java的keytool命令行生成证书 -alias 密钥的别名 -keyalg 密钥使用的加密算法&#xff0c;此处使用RSA -keystore 密钥存储的位置&#xff0c;默认是存在用户主目…

CSS 居中对齐 (水平居中 )

水平居中 1.文本居中对齐 内联元素&#xff08;给容器添加样式&#xff09; 限制条件&#xff1a;仅用于内联元素 display:inline 和 display: inline-block; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><…

python单例模式应用之pymongo连接

文章目录 单例模式介绍模块简介安装简单的连接使用单例模式的连接单例类的实现配置的使用单例模式的测试 单例连接的调用 https://gitee.com/allen-huang/python 单例模式介绍 适用场景&#xff1a; 单例模式只允许创建一个对象&#xff0c;因此节省内存&#xff0c;加快对象访…

Gradient Boosting详解

Gradient Boosting是一种集成学习方法&#xff0c;通过迭代地训练弱分类器来构建一个强分类器。与AdaBoost类似&#xff0c;Gradient Boosting也关注之前轮次中被错误分类的样本&#xff0c;但是它的思想更加一般化&#xff0c;可以用于回归问题和分类问题。以下是Gradient Boo…