package com.算法专练.力扣.二叉树最大宽度;
import javafx.util.Pair;
import sun.reflect.generics.tree.Tree;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* @author xnl
* @Description:
* @date: 2022/8/27 22:45
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode node = new TreeNode(1, new TreeNode(3, new TreeNode(5), new TreeNode(3)), new TreeNode(2, null, new TreeNode(9)));
System.out.println(solution.widthOfBinaryTree(node));
}
/**
* 广度优先算法,需要注意的是pair对象。就和map差不多
* @param root
* @return
*/
public int widthOfBinaryTree(TreeNode root) {
if (root == null){
return 0;
}
int res = 1;
List<Pair<TreeNode, Integer>> list = new ArrayList<Pair<TreeNode, Integer>>();
list.add(new Pair<>(root, 1));
while (!list.isEmpty()){
List<Pair<TreeNode, Integer>> temp = new ArrayList<>();
for (Pair<TreeNode, Integer> pair : list){
TreeNode node = pair.getKey();
Integer index = pair.getValue();
if (node.left != null){
temp.add(new Pair<>(node.left, index * 2));
}
if (node.right != null){
temp.add(new Pair<>(node.right, index * 2 + 1));
}
}
res = Math.max(res, list.get(list.size() - 1).getValue() - list.get(0).getValue() + 1);
list = temp;
}
return res;
}
/**
* 深度优先算法
* 与广度优先 遍历类似,都是记录节点
* 判断开始节点的位置,然后计算使用到了多少个节点
* 父节点的左子节点等于 node * 2, 右节点等于 node * 2 + 1
* @param root
* @return
*/
int result = 0;
Map<Integer, Integer> map = new HashMap<>();
public int widthOfBinaryTree2(TreeNode root) {
dfs(root, 1, 0);
return result;
}
private void dfs(TreeNode node, int nodeIndex, int level){
if (node == null){
return;
}
map.putIfAbsent(level, nodeIndex);
result = Math.max(result, nodeIndex - map.get(level) + 1);
dfs(node.left, nodeIndex * 2, level + 1);
dfs(node.right, nodeIndex * 2 + 1, level + 1);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
相关推荐
密码学新手必看:三大顶级会议论文下载与阅读指南(附完整资源链接)
本文为密码学新手提供了系统性的三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文学习指南。内容涵盖如何高效获取最新论文资源、结构化精读论文的方法论,以及将理论转化为代码实践的路径,旨在帮助初学者快速构建密码学知识体系并应用于研究。
使用广度优先搜索获取二叉树最大宽度(JAVA)
Park的使用场景当我们在写一个方法需要返回两个字段值时,我之前的方法是新建一个类或使用集合。目前来看使用Pair方便很多。
Win10/Win11系统下,用VSCode编译Betaflight固件最全避坑指南(从GCC安装到HEX生成)
本文详细介绍了在Win10/Win11系统下使用VSCode编译Betaflight固件的完整流程,包括GCC安装、环境变量配置、终端选择、Make工具安装等关键步骤,帮助开发者避开常见陷阱,高效生成HEX文件。特别针对VSCode环境优化和编译错误排查提供了实用解决方案。
力扣662.二叉树最大宽度
662.二叉树最大宽度 思路: 本题可以考虑将二叉树每个节点的值都进行替换,最后直接用 最左边和最右边节点的值相减+1 得出最大宽度 将根节点值设为 1(这里任意数都可以),则根节点的左节点值设为 2×1 ,右节点则为 (2×1)+1 这里使用双端队列方便得到其 最左边节点的值 和 最右边节点的值 ,根据队列当前大小来逐层放入元素,最后 相减+1 得出最大宽度 注意点: 最大宽度不一定是最下面一层,所以要 与上一层相比较取最大值 代码实现 /** * Definition for a binary t
Axure原型模板与元件库APP交互设计素材(附资料)
在Axure中,手机模型是展示APP或小程序界面效果的重要工具。通过导入手机模型元件,设计师可以更加直观地模拟真实设备的显示效果,从而更准确地评估设计的可行性和用户体验。Axure官方及第三方资源库中提供了多种品牌和型号的手机模型,如iPhone、Android等,设计师可以根据项目需求选择合适的模型进行使用。Axure作为一款强大的原型设计工具,为APP和小程序的设计与开发提供了丰富的界面组件元件库和交互设计素材。
WinCC与PLC在西门子逻辑赛项中的通信配置避坑指南
本文针对西门子逻辑赛项中WinCC与PLC通信配置的常见问题,提供了一套实战避坑指南。重点解析了WinCC、PLC与EET仿真平台的三角通信架构,强调了IP地址规划、防火墙设置等关键环节的注意事项,并给出了系统化的故障诊断流程与排查技巧,帮助选手和技术人员快速定位并解决通信故障,确保监控系统稳定运行。
力扣(14) - 二叉树最大宽度
给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。 示例 1: 输入: 1 / \ 3 2 / \ \ 5 3 9 输出: 4 解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。 示例 2
告别仿真失败!用Sigrity 2022 SystemSI搞定DDR4信号质量仿真的保姆级流程
本文详细介绍了如何使用Sigrity 2022 SystemSI工具进行DDR4信号完整性仿真,提供了一套避免仿真失败、提高仿真精度和加速仿真流程的保姆级方法。从模型验证、设计数据预处理到拓扑构建和参数提取,再到高级调试技巧和仿真加速方案,帮助硬件工程师系统性地解决DDR4信号质量仿真中的常见问题。
力扣解题思路:662. 二叉树最大宽度 纠错记录
662. 二叉树最大宽度 思路: 最开始我的想法是直接BFS,然后记录每一层从左到右的节点,遍历完一层后去掉左右的空节点,中间的节点数就是宽度了,然后就有: public int widthOfBinaryTree(TreeNode root) { if(root == null) return 0; Queue<TreeNode> queue = new LinkedList<>(); queue.add(root);
【从0到1实战】C# WinForm开发工业级PLC监控系统(完整串口+Modbus RTU/TCP+数据库存储+源码+避坑指南)
做C#工控上位机开发的工程师,尤其是刚入行的新人,最核心的刚需就是开发一套完整的PLC监控系统。这也是工控领域最基础、最核心、应用最广的项目类型——小到单台PLC的设备测控,大到整线的产线监控,本质都是「上位机与PLC通讯,实现数据采集、参数下发、状态监控、数据存储」。碎片化的知识点学了很多,串口会用了、Modbus协议看了、数据库也懂点,但是始终无法把这些知识点串联起来,做出一套能落地的工业级PLC监控系统。
【C语言】初识C语言(上篇)
初识C语言第一部分
LeetCode-662-二叉树最大宽度
LeetCode-662-二叉树最大宽度
18|AI 辅助精准测试:让平台会解释、会总结、会推荐
本文介绍 AI 在精准测试平台中的落地方式,包括变更摘要、风险解释、补测建议和报告总结。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。从报告中提取变更文件、未覆盖行、推荐用例。拼成结构化 JSON。让 AI 生成 200 字质量摘要。把摘要展示在报告顶部。读完本文后,可以复制下面的 Prompt,让 AI 生成一个报告总结练习。你是一名 AI 应用开发专家和测试架构师。
力扣 662 :二叉树最大宽度
本文详解了力扣662题「二叉树最大宽度」的解题思路与优化技巧。核心解法采用层序遍历结合完全二叉树编号规则:通过给节点分配编号(根为0,左子2i,右子2i+1),逐层计算宽度(最大编号-最小编号+1)。基础解法存在数值溢出风险,优化方案通过每层编号偏移(减去最小编号)压缩数值范围,避免溢出。文章强调BFS在层序问题中的适用性,以及工程编码中封装数据的重要性,并指出掌握编号规则、偏移优化等技巧对解决同类二叉树问题的普适价值。
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
leetcode 662 : 二叉树最大宽度
leetcode 662 : 二叉树最大宽度题目描述解法我的思路官方题解方法一:宽度优先搜索 BFS方法二:深度优先搜索 DFS 题目描述 给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间...
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
C练题笔记之:Leetcode-662. 二叉树最大宽度
给你一棵二叉树的根节点 root ,返回树的 最大宽度。树的 最大宽度 是所有层中最大的 宽度。每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的 null 节点,这些 null 节点也计入长度。题目数据保证答案将会在 32 位 带符号整数范围内。示例 1:输入:root = [1,3,2,5,3,null,9]输出:4。...
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
leetcode——662:求二叉树最大宽度
给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。 示例 1: 输入: 1 / \ 3 2 / \ \ 5 3 9 输出: 4 解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。 示例 2
力扣662:二叉树的最大宽度
力扣662:二叉树的最大宽度。C语言
Leetcode 662:二叉树的最大宽度
题目描述 给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。 示例 1: 输入: 1 / \ 3 2...
每日一题:Leetcode-662 二叉树最大宽度
力扣题目解题思路java代码。
LeetCode 662:二叉树最大宽度
二叉树的最大宽度
图解LeetCode——662. 二叉树最大宽度(难度:中等)
对于编号的存储,我们可以创建一个对象,里面包含编号和TreeNode这两个变量,也可以使用JDK内置的Pair对象,由于本题中,节点的val值没有任何用处,所以,编号我就存储到了val属性值中,这样更易于存储和获取。构建虚拟的空节点虽然可以满足题目的计算逻辑,但是,由于要大量的创建空的虚拟节点,而且越到层级越深且该层级真是节点越少,那么创建的空节点将会非常的多,那么在提交的时候,就会。那么,由于没有子节点就创建空的虚拟节点,如果不添加某个判断条件,这种构建空节点的操作将会无限的创建下去。...
JAVA程序设计:二叉树最大宽度(LeetCode:662)
给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。 示例 1: 输入: 1 / \ 3 2 ...
LeetCode : 662. Maximum Width of Binary Tree 最大二叉树宽度
试题: Given a binary tree, write a function to get the maximum width of the given tree. The width of a tree is the maximum width among all levels. The binary tree has the same structure as a full binary...
leetcode:662. 二叉树最大宽度【bfs + 二叉树序号】
二叉树序号。
LeetCode662:二叉树最大宽度(二叉树非典型最大宽度,BFS层序遍历重编号)
给你一棵二叉树的根节点 root ,返回树的 最大宽度。树的 最大宽度 是所有层中最大的 宽度。每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的 null 节点,这些 null 节点也计入长度。题目数据保证答案将会在 32 位 带符号整数范围内。示例 1:输入:root = [1,3,2,5,3,null,9]输出:4。
317



被折叠的 条评论
为什么被折叠?



