队列+宽搜专题篇

目录

N叉树的层序遍历

二叉树的锯齿形层序遍历

二叉树最大宽度

在每个树行中找最大值


N叉树的层序遍历

题目

思路

使用队列+层序遍历来解决这道题,首先判断根节点是否为空,为空则返回空的二维数组;否则,就进行层序遍历,将每层节点依次取出,放入到二维数组中,并将取出的节点的孩子依次添加到队列中,最后返回二维数组。

代码

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.empty()){int sz=q.size();vector<int> v;while(sz--){Node* tp=q.front();q.pop();v.push_back(tp->val);for(Node* child:tp->children)if(child!=nullptr) q.push(child);}ret.push_back(v);}return ret;}
};
二叉树的锯齿形层序遍历

题目

思路

使用队列+层序遍历来解决这道题,不过需要对偶数层的结果进行逆置,可以使用一个变量来记录当前层的层数,或者使用一个布尔变量来记录当前层是否是偶数层,将每层节点依次取出,如果当前层是偶数层,需要先将数组进行逆置,然后再将数组放入到二维数组中,并将取出的节点的孩子依次添加到队列中,最后返回二维数组。

代码

class Solution {
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {vector<vector<int>> ret;if(root==nullptr) return ret;queue<TreeNode*> q;q.push(root);bool flag=false;while(!q.empty()){int sz=q.size();vector<int> v;while(sz--){TreeNode* node=q.front();q.pop();v.push_back(node->val);if(node->left) q.push(node->left);if(node->right) q.push(node->right);}if(flag) reverse(v.begin(),v.end());ret.push_back(v);flag=!flag;}return ret;}
};
二叉树最大宽度

题目

思路

首先我们可能会想到下面的方法,将空节点也加入到队列中,然后统计每一次一层非空节点之间空节点的数量,然后+2就是二叉树该行的最大宽度,但是这道题有可能是第二张图那种倒V型,这样就会导致我们队列存储的节点数量非常之多,因此这种方法看起来可行,但实际上是行不通的。

我们可能会想到对每个节点进行编号(受使用数组建堆的启发),根节点的编号可以从0开始也可以从1开始,虽然编号可能会溢出,但是差值是正确的,但是如果我们使用int来存储,溢出时会报错,因此我们使用unsigned int来存储宽度,解法依旧是使用队列+层序遍历,步骤和前几道题是一样的。

代码

class Solution {
public:int widthOfBinaryTree(TreeNode* root) {vector<pair<TreeNode*,unsigned int>> q;q.push_back({root,1});unsigned int ret=0;while(!q.empty()){auto [a,b]=q[0];auto [c,d]=q.back();ret=max(ret,d-b+1);vector<pair<TreeNode*,unsigned int>> v;for(auto [x,y]:q){if(x->left) v.push_back({x->left,2*y});if(x->right) v.push_back({x->right,2*y+1});}q=v;}return ret;}
};
在每个树行中找最大值

题目

思路

使用队列+层序遍历来解决这道题,步骤和前几道题是一样的,无非是在遍历每一层时,将每一层的最大值记录下来,最后返回数组。

代码

class Solution {
public:vector<int> largestValues(TreeNode* root) {vector<int> ret;if(root==nullptr) return ret;queue<TreeNode*> q;q.push(root);while(!q.empty()){int sz=q.size();vector<int> v;while(sz--){TreeNode* node=q.front();q.pop();v.push_back(node->val);if(node->left) q.push(node->left);if(node->right) q.push(node->right);}ret.push_back(*max_element(v.begin(),v.end()));}return ret;}
};

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

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

相关文章

论文阅读 | 可证安全隐写(网络空间安全科学学报 2023)

可证安全隐写&#xff1a;理论、应用与展望 一、什么是可证安全隐写&#xff1f; 对于经验安全的隐写算法&#xff0c;即使其算法设计得相当周密&#xff0c;隐写分析者&#xff08;攻击者&#xff09;在观察了足够数量的载密&#xff08;含有隐写信息的数据&#xff09;和载体…

6.数据库-数据库设计

6.数据库-数据库设计 文章目录 6.数据库-数据库设计一、设计数据库的步骤二、绘制E-R图三、关系模式第一范式 (1st NF)第二范式 (2nd NF)第三范式 (3nd NF)规范化和性能的关系 一、设计数据库的步骤 收集信息 与该系统有关人员进行交流、座谈&#xff0c;充分了解用户需求&am…

Vulkan 学习(9)---- vkSuraceKHR 创建

目录 OverView创建窗口表面参考代码 OverView Vulkan 是一个平台无关的图形API&#xff0c;这意味着它不能直接与特定的窗口系统(Windows&#xff0c;linux 和 macOS 的窗口系统)进行交互 为了解决这个问题&#xff0c;Vulkan 引入了窗口系统集成(Window System Intergration …

DOM【JavaScript】

在JavaScript中&#xff0c;DOM (Document Object Model&#xff1a;文档对象模型) 是web页面的编程接口&#xff0c;用于表示和操作 HTML 和 XML 文档。它将文档结构化为一个树形结构&#xff0c;允许开发者通过 JavaScript 访问和修改网页的内容、结构和样式。以下是一些关于…

基于单片机的智能校园照明系统

由于校园用电量较大&#xff0c;本设计可以根据实际环境情况的改变&#xff0c;实现实时照明的控制。本设计以单片机芯片为控制芯片&#xff0c;热释电传感器采集教室中学生出入的信息&#xff0c;并把信息传递给单片机芯片&#xff0c;单片机芯片根据传感器传递过来的信息来控…

【软件测试】Bug 篇

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 今天给大家带来的是 【软件测试】Bug 篇&#xff0c;首先了解, 什么是Bug, 如何定义一个Bug, 如何描述一个 Bug, Bug的级别, 和 Bug 的生命周期, 以及测试人员跟开发人员产生争执如何处理,…

【MYSQL】聚合查询、分组查询、联合查询

目录 聚合查询聚合函数count()sum()avg()max()和min()总结 分组查询group by 子句having 子句 联合查询笛卡尔积内连接外连接自连接子查询单行子查询多行子查询from子句使用子查询 合并查询 聚合查询 聚合查询就是针对表中行与行之间的查询。 聚合函数 count() count(列名)&a…

个人随想-代码生成工具v0+claude+cursor

cursor出来已经有一段时间了&#xff0c;不知道大家用了感觉怎么样。今天就以我个人为例&#xff0c;给大家介绍一下我是如何使用cursor搭建原型。 首先&#xff0c;我并不觉得cursor对于后端程序员带来了革命性改进&#xff0c;我们与很多团队沟&#xff0c;使用cursor80%以上…

spring中的容器接口的实现类和功能

容器实现 BeanFactory 实现 这里我们就来一步步实现BeanFactory的功能。 首先创建我们需要的类 Configuration static class Config{Beanpublic Bean1 bean1(){return new Bean1();}Beanpublic Bean2 bean2(){return new Bean2();}}static class Bean1{private static fina…

【Linux】Shell 编程规范及检查工具推荐

本文内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01; 如果对您有帮助&#xff0c;烦请点赞、关注、转发、订阅专栏&#xff01; 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】&#xff08;全…

【RH124】解释Linux文件系统权限

RH124教材中控制对文件的访问一章中有一道解释Linux文件系统权限的测验题&#xff0c;可以一起来看看&#xff1a; 一、权限解释 这是通过 ls -l 命令查看的结果。它显示了文件或目录的权限、拥有者、所属组等信息。 1、长列表的第一个字符表示文件类型&#xff1a; -是常…

【C语言零基础入门篇 - 16】:栈和队列

文章目录 栈和队列栈栈功能的实现源代码 队列队列功能的实现源代码 栈和队列 栈 什么是栈&#xff1a;功能受限的线性数据结构 栈的特点&#xff1a;先进后出 。例如&#xff1a;仓库进货、出货。 栈只有一个开口&#xff0c;先进去的数据在栈底&#xff08;bottom&#xf…

STM32篇:STM32CubeMX的安装

一.介绍与安装 1.作用 通过界面的方式&#xff0c;快速生成工程文件。 2.下载 官网 https://www.st.com/zh/development-tools/stm32cubemx.html#overview 3.安装 一路下一步&#xff0c;建议不要安装在C盘 4.配置 更新固件包位置&#xff08;比较大&#xff0c;默认在…

LeetCode 257. 二叉树的所有路径(回溯详解)

文章目录 LeetCode 257. 二叉树的所有路径思路递归版本一:非常明确的回溯代码版本二&#xff1a;精简的回溯代码 LeetCode 257. 二叉树的所有路径 LeetCode 257. 二叉树的所有路径 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节…

全网最适合入门的面向对象编程教程:51 Python函数方法与接口-使用Zope实现接口

全网最适合入门的面向对象编程教程&#xff1a;51 Python 函数方法与接口-使用 Zope 实现接口 摘要&#xff1a; 在 Python 中&#xff0c;Zope 提供了一种机制来定义和实现接口。Zope 的接口模块通常用于创建可重用的组件&#xff0c;并确保组件遵循特定的接口规范。 原文链…

力扣 209.长度最小的子数组

一、长度最小的子数组 二、解题思路 采用滑动窗口的思路&#xff0c;详细见代码。 三、代码 class Solution {public int minSubArrayLen(int target, int[] nums) {int n nums.length, left 0, right 0, sum 0;int ans n 1; for (right 0; right < n; right ) { …

【二等奖论文】2024年华为杯研赛D题成品论文(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接获取【2024华为杯研赛资料汇总】&#xff1a; https://qm.qq.com/q/jTIeGzwkSchttps://qm.qq.com/q/jTIeGzwkSc 题 目&#xff1a; 大数据驱动的…

一劳永逸:用脚本实现夸克网盘内容自动更新

系统环境&#xff1a;debian/ubuntu 、 安装了python3 原作者项目&#xff1a;https://github.com/Cp0204/quark-auto-save 感谢 缘起 我喜欢看电影追剧&#xff0c;会经常转存一些资源到夸克网盘&#xff0c;电影还好&#xff0c;如果是电视剧&#xff0c;麻烦就来了。 对于一…

深度学习-卷积神经网络(CNN)

文章目录 一、网络构造1. 卷积层&#xff08;Convolutional Layer&#xff09;&#xff08;1&#xff09;卷积&#xff08;2&#xff09;特征图计算公式&#xff08;3&#xff09;三通道卷积 2. 激活函数&#xff08;Activation Function&#xff09;3. 池化层&#xff08;Pool…

【JUC并发编程系列】深入理解Java并发机制:线程局部变量的奥秘与最佳实践(五、ThreadLocal原理、对象之间的引用)

文章目录 【JUC并发编程系列】深入理解Java并发机制&#xff1a;线程局部变量的奥秘与最佳实践(五、ThreadLocal原理、对象之间的引用)1. 基本 API 介绍2. 简单用法3. 应用场景4. Threadlocal与Synchronized区别5. 内存溢出和内存泄漏5.2 内存溢出 (Memory Overflow)5.2 内存泄…