【重点】【二叉树】662.二叉树最大宽度

算法学习 (门徒计划)2-1 二叉树(Binary-Tree)与经典问题 学习笔记 学习二叉树的核心理念 - 数据的存储结构本身不具备绝对的优劣区分,最重要的是根据实际情况选择最合适的结构进行使用。 - 树结构是为了实现管理数据的从属关系和实现快速查询而设计的。 - 学习树有利于提升思维的维度。 - 设计方案时,时空复杂度有时不可兼得,需要根据具体情况选择合适的方式 阅读详情

题目

法1:BFS,最佳方法

在这里插入图片描述

版本1:修改原TreeNode

Python

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def widthOfBinaryTree(self, root: Optional[TreeNode]) -> int:
        res = 0
        queue = collections.deque()
        root.val = 1
        queue.append(root)
        while queue:
            tmpSize = len(queue)
            start, end = -1, -1
            for i in range(tmpSize):
                curNode = queue.popleft()
                val = curNode.val
                if i == 0:
                    start = curNode.val
                if i == tmpSize - 1:
                    end = curNode.val
                if curNode.left:
                    curNode.left.val = 2 * val
                    queue.append(curNode.left)
                if curNode.right:
                    curNode.right.val = 2 * val + 1
                    queue.append(curNode.right)
            res = max(res, end - start + 1)

        return res

Java

class Solution {
    public int widthOfBinaryTree(TreeNode root) {
        int ans = 0;
        Deque<TreeNode> deque = new LinkedList<>();
        root.val = 1;
        deque.offer(root);
        while(!deque.isEmpty()) {
            int count = deque.size(), startIndex = -1, endIndex = -1;
            for (int i = 0; i < count; i++) {
                TreeNode node = deque.poll();
                endIndex = node.val;
                if (startIndex == -1) {
                    startIndex = node.val;
                }
                if (node.left != null) {
                    node.left.val = node.val * 2;
                    deque.offer(node.left);
                }
                if (node.right != null) {
                    node.right.val = node.val * 2 + 1;
                    deque.offer(node.right);
                }
            }
            ans = Math.max(ans, endIndex - startIndex + 1);
        }

        return ans;
    }
}

版本2:构建新TreeNode

class Solution {
    public int widthOfBinaryTree(TreeNode root) {
        int ans = 0;
        Deque<TreeNode> deque = new LinkedList<>();
        deque.offer(new TreeNode(1, root.left, root.right));
        while(!deque.isEmpty()) {
            int count = deque.size(), startIndex = -1, endIndex = -1;
            for (int i = 0; i < count; i++) {
                TreeNode node = deque.poll();
                endIndex = node.val;
                if (startIndex == -1) {
                    startIndex = node.val;
                }
                if (node.left != null) {
                    deque.offer(new TreeNode(node.val * 2, node.left.left, node.left.right));
                }
                if (node.right != null) {
                    deque.offer(new TreeNode(node.val * 2 + 1, node.right.left, node.right.right));
                }
            }
            ans = Math.max(ans, endIndex - startIndex + 1);
        }

        return ans;
    }
}
Windows 10 下 Nacos 3.0.2 单机版保姆级安装教程(含JDK 17配置与MySQL 8.0连接避坑) 本文提供Windows 10下Nacos 3.0.2单机版的详细安装教程,涵盖JDK 17配置、MySQL 8.0连接优化及生产级安全设置。通过步骤详解和常见问题解决方案,帮助开发者快速完成Nacos的安装与配置,确保服务发现与配置管理的高效运行。 阅读详情

相关推荐

Agv、Rgv 车辆控制调度系统开发第一篇

Agv、Rgv 车辆控制调度系统第一篇为什么要做这个系统先看作品从头讲起算法讲解编程语言从哪里开始继续深入预告 为什么要做这个系统 说白了是为了赚钱,在一个项目中发现公司买别人家的调度系统要几十万,还只是一个项目的实施,从那天起我就决定自己写一套,用了一年的时间写出来后,才发现根本卖不掉,卖不掉就卖不掉吧,反正我现在已经吧写这套系统当成了一种乐趣,如果不让我写了我反而不适应,但是没有人欣赏我的成果我反而很难受,所以决定吧这个系统的创作过程,写下来,给后面的人一些建议,少走点弯路。 先看作品 从头讲起 在

持续分享调度系统开发过程 2万+

C++ 队列 宽度优先搜索 BFS 力扣 662. 二叉树最大宽度 每日一题

本文围绕力扣662题“二叉树最大宽度”展开详解,该题是二叉树层序遍历(BFS)的经典变形,核心考查索引标记与细节把控。文章先明确题目要求——需计入层内空节点计算宽度,随后否定暴力存储空节点的思路,提出利用满二叉树索引规则(根节点从1编号,左子节点2x、右子节点2x+1)的最优解法。通过队列存储节点与对应索引,层序遍历中计算每层最左、最右节点索引差值加1得到宽度,同时用unsigned int避免溢出。文中补充代码实现、模拟过程与复杂度分析(O(n)时间/空间)。

Q741_147的博客 1034

电网渗透之终端安全

        电力系统安全不仅关系到电网的稳定运行,也关系到国家能源安全和国计民生,甚至关系到国家的安全和利益,电力系统由于结构复杂多样、分布广泛、重要性高,一旦系统瘫痪影响巨大,因此,极容易成为敌对势力攻击的首选目标。随着信息安全暴露面迅速增加,将给公司网络安全防线带来严峻挑战。       监控、保障这些电力系统安全运行变的尤为重要。内部安全防护产品有防火墙、纵向加密、反向隔离设备等...

guapi007008的博客 2721

662. 二叉树最大宽度

文章目录题目描述实现思路代码实现参考 662. 二叉树最大宽度 题目描述 实现思路 1、回忆数组表示二叉树的位置如何表示 2、层次遍历二叉树 代码实现 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.r

浩浩花花世界的博客 174

QMI8658A与QMC5883L(9轴)评估板实战指南:从硬件连接到数据校准

本文提供了QMI8658A与QMC5883L九轴传感器评估板的完整实战指南。详细介绍了从硬件I2C/USART连接到传感器零偏与地磁校准的关键步骤,并利用上位机实现数据可视化,帮助开发者快速上手9轴姿态传感技术,应用于无人机、机器人等领域。

metaverse5vr的博客 478

keil自动分配SDRAM空间设置使用

1.修改.sct文件。

qizhi321123的博客 1404

力扣 662 :二叉树最大宽度

本文详解了力扣662题「二叉树最大宽度」的解题思路与优化技巧。核心解法采用层序遍历结合完全二叉树编号规则:通过给节点分配编号(根为0,左子2i,右子2i+1),逐层计算宽度(最大编号-最小编号+1)。基础解法存在数值溢出风险,优化方案通过每层编号偏移(减去最小编号)压缩数值范围,避免溢出。文章强调BFS在层序问题中的适用性,以及工程编码中封装数据的重要性,并指出掌握编号规则、偏移优化等技巧对解决同类二叉树问题的普适价值。

软件科学-郝学胜 801

基于STM32L4XX 、HAL库的TMP144YFFR数字温度传感器驱动应用C语言程序设计

define TMP144_ADDRESS 0x00 // 默认为全局地址,用于单器件或MDA命令。#define TMP144_CMD_READ_TEMP 0x00 // 读取温度寄存器命令。if (temp_raw & 0x800) { // 判断第11位(符号位)

PP_Cottage的博客 91

LeetCode 662. 二叉树最大宽度

LeetCode 662. 二叉树最大宽度 做题后的反思 这道题太恶心了,还要考虑数据范围溢出的问题。 同时通过做这道题我知道了c++中new 出来的结构体是一个指针类型的,要使用node *这种类型的对象来接收。同时,对于这种指针类型的我取值使用->,而不是点。 还有就是一般值与下标有关的我们做题时要考虑直接把值与标存放在一起,使用结构体或者pair,这样更加放标解题。 struct node{ TreeNode *t; long long width; node(Tre

weixin_43310882 139

9、储备池学习:从学习到学习的新范式

本文探讨了基于学习到学习(L2L)框架的储备池计算新范式,提出通过在外循环中优化储备池的超参数(如递归连接权重、输入权重和读出初始化),以提升其在多种任务中的内循环学习性能。研究展示了两种主要实验设置:一是优化储备池用于回归二阶Volterra滤波器任务,显著优于随机基线;二是实现无需调整读出权重、仅依赖内部动态学习非线性函数的能力,表明储备池可快速构建目标函数的内部模型并安装任务先验知识。结合流程图与表格,文章系统呈现了L2L的训练流程、技术细节及实验结果,并讨论了性能提升、泛化能力等开放问题,指出了未来

ujm56789012的博客 502

GEE必须会教程——一文教会你研究区域分块计算与合并

一整块算不是挺好的吗?emmmm,用过的人都知道,GEE好比幼年期的“紫妍”,要用“丹药”来养的,除非你是萧炎小友,到哪都有人给爆金币。我们今天想做的是计算2020年夏季西藏自治区的植被覆盖度(FVC),FVC的估算需要使用归一化植被指数(NDVI数据),这里我们用到的产品是MODIS的相关数据产品,该产品的分辨率是25 0m。下载好的结果毕竟是一块一块的,怎么对下载好的结果进行拼接,变成一张大图呢,别急,接下来,我们上科研小霸王——R语言。此处,我们通过省份数据,按照属性筛选,得到西藏自治区的行政边界。

Promising_GEO的博客 2511

算法日常・每日刷题--<队列,宽搜>3

题目摘要: LeetCode 662题要求计算二叉树的最大宽度,定义为任意一层最左和最右非空节点之间的长度(包含中间的null节点)。例如,输入[1,3,2,5,3,null,9]时,第三层宽度为4(节点5到9之间的长度)。 解法核心: 采用层序遍历(BFS),为每个节点分配堆式编号(根为1,左子节点为2*i,右子节点为2*i+1)。每层宽度通过首尾节点编号差加1计算,最终取所有层的最大值。 代码要点: 使用队列存储节点及其编号,根节点初始编号为1。 分层处理,每层宽度为last编号 - first编号 +

2503_92261635的博客 395

看懂 SAP S/4HANA 产品主数据里的 GTIN:一串号码背后的全球商品识别与业务协同

SAP S/4HANA中的GTIN管理是企业供应链运营的关键环节。本文深入解析GTIN的业务内涵及其在SAP系统中的实现方式:1) GTIN是全球通用的商品标识码,不同于企业内部物料编码;2) SAP主数据中GTIN与计量单位强绑定,需为不同包装层级维护独立GTIN;3) 同一产品可能因渠道、供应商差异存在多个GTIN;4) GTIN贯穿零售POS、仓储管理、EDI订单等核心业务流程;5) 通过典型案例说明错误维护GTIN将导致收银异常、仓库作业低效等运营问题。文章强调GTIN管理需结合包装层级、计量单位等

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1432

LeetCode662二叉树最大宽度

题目链接: LeetCode662二叉树最大宽度. 题目描述 解题思路 通过层序遍历,找出每层最左边的节点与最右边的节点之间的距离,并用此距离更新maxWidth。如何求解该距离时本题的关键。我们知道,对于二叉树而言,如果根节点从1开始编号,那么假设一个节点的编号是n,那么其左孩子编号就是2n,右孩子编号就是2n+1,根据次特征可以使用数组来存储二叉树,会方便得多,但是力扣已经定义了树节点结构,所以还是得用链式存储的相关写法。那么,虽然每个节点都有自己的val,但是这个val对题目求解最大宽度并无任何

m0_46379909的博客 213

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode[662]二叉树的最大宽度

LeetCode[662]二叉树的最大宽度 java解法

月亮被咬碎成星星的博客 490

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【LeetCode】662. 二叉树最大宽度

结合二叉树的特征来做题,会减去不少麻烦!

说文科技,做有态度的研究。 902

LeetCode 662:二叉树最大宽度

二叉树的最大宽度

机械工程跑路哥 180

题目地址(662. 二叉树最大宽度)

给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。...

y1040468929的博客 175

数据结构与算法——二叉树高频题目【2】

记录关于二叉树高频题目的学习。

MiauwYuki的博客 1041

优选算法-队列+宽搜(BFS):72.二叉树的最大宽度

优选算法-队列+宽搜(BFS):72.二叉树的最大宽度解析

要努力去发光,而不是被照亮~ 370

LeetCode:二叉树

给你两棵二叉树 root 和 subRoot。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true;否则,返回 false。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

weixin_50924373的博客 217

【优选算法篇】队列与宽度优先搜索(BFS)——层层递进的视野

本文介绍了BFS(广度优先搜索)在解决树结构问题中的四种典型应用:N叉树的层序遍历、二叉树的锯齿形层序遍历、二叉树的最大宽度计算以及每层最大值查找。通过队列控制层级处理,结合索引编号和反转技巧,高效解决各类层序相关问题。代码示例展示了如何利用BFS模板处理不同变体问题,包括处理N叉树、锯齿形遍历、节点编号溢出问题以及逐层最大值统计。这些方法体现了BFS"涟漪式扩散"的特点,能够系统性地掌控全局树结构信息。

半截诗的博客~ 760

算法学习(19)—— 队列与 BFS

bfs又称宽搜,全称是“”,然后就是关于bfs的三个说法:“宽度优先搜索”,“宽度优先遍历”,“层序遍历”,这三个都是同一个东西,前面我们介绍了大量的深度优先遍历的题目已经衍生算法,对这类比较熟悉的纯队列的题目很少很少,队列这种数据结构大部分都是用来服务BFS算法的,所以我们就把BFS和队列放一起来介绍。和深搜一样,宽搜不仅仅只应用在树形结构中,这篇文章只列举了部分在树中的应用,先熟悉下BFS算法,后面会再展开细讲。

aaqq800520的博客 1137

二叉树相关(一)

提出需求: 用哈希实现: #include<iostream> using namespace std; #include<vector> #include<unordered_map> #include<string> #include<algorithm> class Solution { public: vector<vector<string>>groupAnagrams(vector<string&

weixin_48433164的博客 1230

二叉树专题

本题来源于Leetcode中 归属于二叉树类型题目。同许多在算法道路上不断前行的人一样,不断练习,修炼自己!嘿嘿喜欢本系列博客的可以关注下,以后除了会继续更新面试手撕代码文章外,还会出其他系列的文章!

香农三定律的博客 1492

数据结构(六)—— 二叉树(8)code

二叉树面试题,持续更新

weixin_42690036的博客 116
上一篇: 【DP】【贪心】122.买卖股票的最佳时机II
下一篇: 【DP】LCR 100.三角形最小路径和
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值