队列+宽搜(BFS)-662.二叉树最大宽度-力扣(LeetCode) - 指南

news/2025/9/27 8:09:15/文章来源:https://www.cnblogs.com/lxjshuju/p/19114708

目录

一、题目解析

1、宽度定义为最左节点和最右的非空节点之间的长度

2、类比char的存储(一个首尾相连的环,127+1!=128 = -127),哪怕int可能会溢出,但是所得的差,由题目保证的32位范围内,所以结果是不会溢出的

二、算法原理

解法1:直接统计nullptr的数目(这虽然是一个错误的解法,但仍有其价值)

解法2:利用数组存储二叉树,给节点编号

编号呢有两种,行自行选择

宽度的保存

具体过程

三、代码示例

解法2:

看到最后,如果对您有所帮助,还请点赞、收藏和关注一键三连,在未来还会继续带来优秀的内容,感谢观看,大家下期再见!


一、题目解析

1、宽度定义为最左节点和最右的非空节点之间的长度

2、类比char的存储(一个首尾相连的环,127+1!=128 = -128),虽然int可能会溢出,但所得的差,由题目保证的32位范围内,因此结果是不会溢出的

二、算法原理

一个错误的解法,但仍有其价值)就是解法1:直接统计nullptr的数目(这纵然

在遇到第一个非空节点后,开始统计nullptr的数目,在遇到下一个非空节点时,返回结果

错误之处:

存在着某个测试样式,将3000个节点左右均分,所以此时最后一层的节点树大概有2^1497个这么多

但我们在学习二叉树的时候,简单模拟是通过数组实现的,可能通过给节点编号,将节点存储在数组中,故而便有了解法2

解法2:利用数组存储二叉树,给节点编号

之前的队列都是只存储节点的指针,但我们要利用编号进行宽度计算,所以queue中或者vector模拟应存储一个pair<TreeNode*,long>的类型的数据,为什么用long呢?当然是int编号溢出了

编号呢有两种,可以自行选择

如此就是1、root为0,左孩子为2*0+1,右孩子为2*0+2,其他节点也

2、root为1,左孩子为2*1,右孩子为2*1+1,其他节点也是如此

宽度的保存

结合题目和 char存储的模型,我们知道了最后的结果是有效的,但该如何保存该宽度呢?依据unsigned int无符号整数存储这个宽度,但是为了方便得到最终的最大值,可以初始化为1(也允许处理只有根的情况)

具体过程

参考层序遍历,只不过中间有一些空节点需要处理

在对每一层遍历时,先统计队列中的元素个数,这个个数代表该层元素个数,也代表循环次数

我们first是TreeNode*,用于判断它的左右孩子是否入队(我这里选择是nullptr不入队),second是节点的编号,用于计算宽度

在层序遍历完后,取出队列对头(左端点)和队尾(右端点),计算宽度并且与上一次结果比较,如果比上次大则更新宽度,否则不更新

三、代码示例

解法2:

class Solution {
public:
int widthOfBinaryTree(TreeNode* root)
{
queue> qti;
unsigned int ret = 1;//特殊处理只有根
if(root) qti.push({root,0});//入根
while(qti.size())
{
int num = qti.size();
pair tmp;//int会溢出
while(num--)//执行每层个数次
{
tmp = qti.front();
qti.pop();
if(tmp.first->left) qti.push({tmp.first->left,2*(tmp.second)+1});//不入空
if(tmp.first->right) qti.push({tmp.first->right,2*(tmp.second)+2});//通过编号计算宽度
}
if(qti.size())
ret = ret>qti.back().second-qti.front().second+1 ? ret : qti.back().second-qti.front().second+1;//取对头和队尾做计算
}
return ret;
}
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注一键三连,在未来还会继续带来优秀的内容,感谢观看,我们下期再见!

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

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

相关文章

Istio服务网格方案 - 实践

Istio服务网格方案 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

网站服务商是什么wordpress评论框不见了

文章目录 空间域上的滤波器- 线性滤波器盒状滤波器Box Filter锐化Sharpening相关运算 vs. 卷积运算 Correlation vs. Convolution - 非线性滤波器高斯滤波器Gaussian filter - 实际问题- 纹理texture 频域上的滤波器 滤波的应用- 模板匹配- 图像金字塔 空间域上的滤波器 图像…

杭州微网站wordpress 旅游

继 ChatGPT 后&#xff0c;OpenAI 又发布了爆炸级产品——Sora 文生视频模型&#xff0c;当其他模型还在努力突破几秒内的连贯性问题时&#xff0c;Sora 已经将视频时长拉到了 60s。不过&#xff0c;目前 Sora 模型仅对小部分研究人员和创意人士开放访问权限。 别担心&#xf…

JWT攻防实战:混淆、破解与红队利用技术详解

本文深入解析JWT安全机制,涵盖Base64编码结构、混淆技术、密钥破解(HS256/RS256算法混淆)、none算法攻击等实战手法,并结合TryHackMe/HTB真实靶场演示漏洞利用流程,最后提供JWT安全防护最佳实践。JWT攻防实战:混…

“中国英伟达”投资人,赚翻了

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087还未上市,摩尔线程的朋友圈却已经赚翻了。 在这家国产GPU公司要上…

网站标签怎么设置雏光 网络推广 网站建设

目录 总结一、步骤前端1.第一步-编写tabs的modelBody2.第二步编辑表扩展js 后端--重写表的add和Update方法1.第一步 总结 编写tabs的modelBody后编辑表扩展js在重写后端partial的Service 一、步骤 前端 1.第一步-编写tabs的modelBody 复制下面代码该改的改 <template&…

云主机怎么做网站厦门网站推广费用

及时雨宋江及时的不是雨&#xff0c;而是银子。 年轻的时候&#xff0c;以为聚义厅聚的是义&#xff0c;中年以后才看明白&#xff0c;聚义厅聚的是利。 利益是纽带&#xff0c;是动力。 懂得从他人利益的角度出发&#xff0c;我们才能调动更多的人和资源&#xff0c;成就一…

单位网站的方案wordpress示例页面在哪删除

优先级队列&#xff08;Priority Queue&#xff09;是一种特殊的队列类型&#xff0c;它允许在其元素中分配优先级。与传统的先进先出&#xff08;FIFO&#xff09;队列不同&#xff0c;优先级队列中元素的出队顺序取决于它们的优先级。优先级较高的元素会被优先处理&#xff0…

The 3rd UCUP Stage 29: Metropolis(QOJ contest 1913) 总结

附:出题组题解(繁中)。 A(不可做) B 递归贪心地构造,若当前点有未走的相邻点,且没有 \(p_{i+1}\),那么当前点就要连 \(p_{i+1}\),递归 \(p_{i+1}\)。否则我们可以先回溯。 C 发现其中有一个人每次都只能选偶数…

推进门户网站建设工作会议河北建设厅网站首页

【PC电脑windows环境下-[jetson-orin-NX]Linux环境下-下载工具esptool工具使用-相关细节-简单样例-实际操作】 1、概述2、实验环境3、 物品说明4-2、自我总结5、本次实验说明1、准备样例2、设置芯片3、编译4、下载5、验证 &#xff08;1&#xff09;windows环境下进行烧写1、下…

空白金兰契的多维解构与实践路径:从价值表征困境到人机共生伦理

"空白金兰契"的多维解构与实践路径:从价值表征困境到人机共生伦理 一、价值表征困境的哲学反思 1.1 价值表征暴力的本质与根源 在人工智能伦理研究中,价值表征困境已成为一个核心难题。任何试图用固定规则…

山西建设机械网站首页硬件开发公司

一、问题场景 项目有个需求&#xff0c;在登录页面&#xff0c;输入好账号密码后&#xff0c;直接可以点击回车就能够登录&#xff0c;效果和点击登录按钮一样&#xff0c;登录页面源码如下 <template><body id"poster"><el-form class"login-…

做网站的工作有发展空间没有安全工程师

什么是事务&#xff1f; 我们在开发企业应用时&#xff0c;对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行的过程中&#xff0c;任何一步操作都有可能发生异常&#xff0c;异常会导致后续操作无法完成&#xff0c;此时由于业务逻辑并未正确…

缩短链接网站微信小程序广告收益

转载于:https://www.cnblogs.com/jcfxl/p/5739741.html

2025中国制造企业500强榜单发布

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 35469554100490872025中国制造业企业500强入围门槛再次提升,达到173.65亿元,较上年…

网站设置访问密码网站建设的基本元素

分类规范内容内外架安全1、扫地杆离地0.2米&#xff0c;立杆间距1.5米&#xff0c;外大横杆上下间距1米&#xff0c;内大横杆上下间距1.8米&#xff0c;步距1.8米2、立杆着落点不得悬空&#xff0c;垫块面积&#xff1e;240240mm3、外架和支模架不得连接、固定在一起4、外架操作…

上海做网站内容检查的公司网站开发进度计划书

Excel使用过程中经常需要将一个表格内容复制粘贴到其他表格中去。如果原始表格设置了行高和列宽&#xff0c;选中要复制的区域复制后&#xff0c;当在其他表格选择一个单元格进行粘贴时&#xff0c;行高和列宽就都变了。下面介绍excel表格复制粘贴后格式不变的操作方法。excel表…

读 WPF 源代码 了解获取 GlyphTypeface 的 CharacterToGlyphMap 的数量耗时原因

在我的一次应用性能分析中,我发现了尝试获取 GlyphTypeface 的 CharacterToGlyphMap 属性的数量时,存在很大的耗时。经过阅读 WPF 源代码,我了解到了其中的原因,本文将和大家从底层源代码分析原因和给出解决方法在…

张江,首个万亿市值巨头诞生!

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 35469554100490879月18日,中芯国际股价盘中一度暴涨超8%,股价冲高至127.49元,总市…

怎样建设自己的网站的视频全景精灵网站建设

地上有一个m行n列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&#xff0c;也不能进入行坐标和列坐标的数位之和大于k的格子。例如&am…