队列+宽搜_429. N 叉树的层序遍历_二叉树最大宽度

429. N 叉树的层序遍历

定义一个队列q,将一层的节点入队,并记录节点个数。根据节点的个数,出队列,并将其孩子入队列。出完队列,队列当前剩余节点的个数就是下次出队列的次数。直到队列为空

/*
// 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>> re;queue<Node*> q;if(root==nullptr) return re;q.push(root);while(!q.empty()){int sz=q.size();//当前层结点个数vector<int>tmp; //存放当前层结点对应的值for(int i=0;i<sz;i++){Node*t=q.front();q.pop();tmp.push_back(t->val);for(Node*child:t->children) //入队当前节点孩子vector<Node*> children{if(child!=nullptr) q.push(child);}}re.push_back(tmp);}return re;}
};

662. 二叉树最大宽度

我们知道二叉树可以用用数组表示定义根节点下标为1,它左孩子下标就是2,右孩子3.

所以 父母节点节点下标 i ,左孩子下标i*2 右孩子下标i*2+1。

1.存入队列中的元素类型为pair<TreeNode*,int>,也要把对应节点的下标传过去。

2.知道队列头节点的下标 尾节点的下标 : i尾 - i头 +1 尾两节点的距离就是当前层最长的距离 

3.算完当前层,再把它们左右孩子入队列,直到队列为空.

/*** 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) {uint32_t re=0;vector<pair<TreeNode*,uint32_t>> q;q.push_back(make_pair(root,1));while(q.size()){//1.记录当前层的最大宽度auto&[x1,y1]=q[0];auto&[x2,y2]=q.back();uint32_t tmp=y2-y1+1;re=max(re,tmp);//2.更新q队列的节点(换下一层)vector<pair<TreeNode*,uint32_t>> t;for(auto&[x,y]:q){if(x->left) t.push_back({x->left,y*2});if(x->right) t.push_back({x->right,y*2+1});}q=t;}return re;}
};

用数组模拟队列,便于找头尾节点。

出队父母节点,入队其孩子节点。不在原数组q上进行,另开数组t入队其孩子节点。入完后再把存有孩子节点的数组t复制到原数组q上,减少数组出队列移动元素的时间。

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

遍历每一层,把每一次的最大值找出来

/*** 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> re;if(root==nullptr) return re;queue<TreeNode*> q;q.push(root);while(!q.empty()){int sz=q.size();int tmp=INT_MIN;for(int i=0;i<sz;i++){auto t=q.front();q.pop();tmp=max(tmp,t->val);if(t->left)q.push(t->left);if(t->right)q.push(t->right);}re.push_back(tmp);}return re;}
};

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

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

相关文章

语音芯片赋能可穿戴设备:开启个性化音频新体验

在科技日新月异的今天&#xff0c;语音芯片与可穿戴设备的携手合作&#xff0c;正引领我们步入一个前所未有的个性化音频时代。这一创新融合&#xff0c;用户可以享受到更加个性化、沉浸式的音频体验。下面将详细介绍语音芯片与可穿戴设备合作的优点和具体应用。 1. 定制化音效…

单片机学习笔记 18. IIC总线EEPROM(理论)

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

【机器学习】手写数字识别的最优解:CNN+Softmax、Sigmoid与SVM的对比实战

一、基于CNNSoftmax函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 二、 基于CNNsigmoid函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 三、 基于CNNSVM进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分…

TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等

在第一章里面已经介绍了关于同星工程的创建和最基础的总线分析&#xff0c;接下来看看怎么使用TS发送报文以及图形化分析数据。 目录 一、使用Graphics分析报文信号/变量&#xff08;对标CANoe Graphics&#xff09; 二、使用数值窗口统计信号值/变量 三、使用TS发送报文 3…

【老白学 Java】日期 / 时间格式化

日期 / 时间格式化 文章来源&#xff1a;《Head First Java》修炼感悟。 本篇文章&#xff0c;老白把日期和时间的格式化参数进行了整理&#xff0c;方便以后查阅&#xff0c;更加详细的说明请参考 Java API 文档。 一、语法解释 %&#xff0c;必要参数&#xff0c;用于引用参…

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法&#xff08;含伪代码&#xff09;》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…

【嵌入式软件】跑开发板的前置服务配置

在嵌入式开发中,通常需要在 开发板和主机之间共享、传输和挂载文件。 这篇文章是关于如何在 Ubuntu 中配置 Samba、TFTP 和 NFS 协议的详细步骤。这些协议分别用于远程文件共享、文件传输和内核挂载文件系统。 如何安装协议: 参考:ubuntu18配置:详细的内容我手写了一份文档。…

IntelliJ IDEA 使用技巧与插件推荐

目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统&#xff08;VCS&#xff09; 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…

如何对小型固定翼无人机进行最优的路径跟随控制?

控制架构 文章继续采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#xff1a; { x ˙ p V a cos ⁡ γ cos ⁡ χ V w cos ⁡ γ w cos ⁡ χ w y ˙ p V a cos ⁡ γ sin ⁡ χ V w cos ⁡ γ w sin ⁡ χ…

VR虚拟展厅的实时互动是如何实现的?

VR虚拟展厅的实时互动是通过一系列技术和流程实现的&#xff0c;这些技术和流程共同确保了用户在虚拟环境中的互动体验能够及时响应和更新。 接下来&#xff0c;由专业从事VR虚拟展厅制作的圆桌3D云展厅平台为大家介绍一下实现VR虚拟展厅实时互动的几个关键要素&#xff1a; 高…

(三)FT2232HL高速调试器的接口定义与使用配置说明

&#xff08;特别声明&#xff1a;仅对FT2232HL_v0.2 20241125版本进行电路优化调整&#xff09; 如果FT2232HL板子是V0.2版本&#xff08;背面丝印FT2232HL_v0.2 20241125&#xff09;&#xff0c;类似下图这样的&#xff0c;说明已经对电路进行了优化调整。 1、接口定义 FT…

C++20 标准概念

1. 所有标准概念的概述 “类型和对象基本概念”表列出了类型和对象的基本概念。 “范围、迭代器和算法概念”表列出了范围、视图、迭代器和算法的概念。 “辅助概念”表列出的概念主要用作其他概念的构建块&#xff0c;通常不会让应用程序开发者直接使用。 头文件和命名空间 …

zookeeper的安装

zookeeper的安装 一.前言 zookeeper开源组件是为分布式应用&#xff0c;提供协调服务的一种解决方案。本文主要是介绍在Centos7的操作系统中&#xff0c;如何以单机&#xff0c;伪集群&#xff0c;集群的方式来安装部署zookeeper服务。zookeeper要求的jdk版本为1.6以上。本文假…

【经验分享】容器云运维的知识点

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…

【docker】springboot 服务提交至docker

准备docker &#xff08;不是docker hub或者harbor&#xff0c;就是可以运行docker run的服务&#xff09;&#xff0c;首先确保docker已经安装。 本文以linux下举例说明&#xff1a; systemctl stats docker ● docker.service - Docker Application Container EngineLoaded…

MySQL-5.7离线安装配置

说明&#xff1a; 因为在搭建hive和azkaban需要用到mysql数据库&#xff0c;所以先搭建好环境&#xff0c;练习自己搭建比赛会提供 环境&#xff1a; 在宿主机内搭建mysql服务&#xff08;因为容器内搭建比较复杂&#xff09; 开始安装 检查下是否已安装了mysql和mariadb&…

认识异常吧

在 Java 中&#xff0c;将程序执行过程中发生的不正常行为称为异常 。 异常的体系结构 1. Throwable &#xff1a; 是异常体系的顶层类&#xff0c;其派生出两个重要的子类 , Error&#xff08;错误&#xff09; 和 Exception&#xff08;异常&#xff09; 2. Error &…

C++ 【类和对象】

C是面向过程的编程语言。关注的是求解问题的过程。而c是面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的相互交互完成。 1、类 C种类是一种用户自定义的数据类型&#xff0c;用于封装数据成员&#xff08;数据&#xff09…

蛋白研究新热点:AI 全方位剖析 DHA 与 Ferrostatin - 1 的作用密码

胰腺癌是一种非常棘手的癌症&#xff0c;传统化疗药物往往对它收效甚微&#xff0c;很难提高患者的生存率。不过&#xff0c;研究人员发现了一种可能的新治疗方向 —— 利用双氢青蒿素&#xff08;DHA&#xff09;诱导癌细胞发生铁死亡。 下面将以Dihydroartemisinin induces …

使用idea创建一个JAVA WEB项目

文章目录 1. javaweb项目简介2. 创建2.1 idea新建项目2.2 选择&#xff0c;命名2.3 打开2.4 选择tomcat运行2.5 结果 3. 总结 1. javaweb项目简介 JavaWeb项目是一种基于Java技术的Web应用程序&#xff0c;主要用于开发动态网页和Web服务。这种项目能够构建在Java技术栈之上&a…