力扣:662. 二叉树最大宽度

Leetcode 662: 二叉树最大宽度 是一道考察树的层序遍历和位编号思想的经典题目。通过以上解法分析与模板准备,可以快速完成这道题并 AC!相比解法 1 的队列实现,这里省略使用。来记录编号数,直接在每层中计算。 阅读详情
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;
      }
  }

【深度学习面试八股文】-- 1-5 1.样本不平衡的处理方法 ①欠采样 - 随机删除观测数量足够多的类,使得两个类别间的相对比例是显著的。虽然这种方法使用起来非常简单,但很有可能被我们删除了的数据包含着预测类的重要信息。 ②过采样 - 对于不平衡的类别,我们使用拷贝现有样本的方法随机增加观测数量。理想情况下这种方法给了我们足够的样本数,但过采样可能导致过拟合训练数据。 ③合成采样( SMOTE )-该技术要求我们用合成方法得到不平衡类别的观测,该技术与现有的使用最近邻分类方法很类似。问题在于当一个类别的观测数量极度稀少时该怎... 阅读详情

相关推荐

密码学新手必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学新手提供了系统性的三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文学习指南。内容涵盖如何高效获取最新论文资源、结构化精读论文的方法论,以及将理论转化为代码实践的路径,旨在帮助初学者快速构建密码学知识体系并应用于研究。

weixin_29214691的博客 317

使用广度优先搜索获取二叉树最大宽度(JAVA)

Park的使用场景当我们在写一个方法需要返回两个字段值时,我之前的方法是新建一个类或使用集合。目前来看使用Pair方便很多。

qq_64175538的博客 349

Win10/Win11系统下,用VSCode编译Betaflight固件最全避坑指南(从GCC安装到HEX生成)

本文详细介绍了在Win10/Win11系统下使用VSCode编译Betaflight固件的完整流程,包括GCC安装、环境变量配置、终端选择、Make工具安装等关键步骤,帮助开发者避开常见陷阱,高效生成HEX文件。特别针对VSCode环境优化和编译错误排查提供了实用解决方案。

weixin_42557803的博客 415

力扣662.二叉树最大宽度

662.二叉树最大宽度 思路: 本题可以考虑将二叉树每个节点的值都进行替换,最后直接用 最左边和最右边节点的值相减+1 得出最大宽度 将根节点值设为 1(这里任意数都可以),则根节点的左节点值设为 2×1 ,右节点则为 (2×1)+1 这里使用双端队列方便得到其 最左边节点的值 和 最右边节点的值 ,根据队列当前大小来逐层放入元素,最后 相减+1 得出最大宽度 注意点: 最大宽度不一定是最下面一层,所以要 与上一层相比较取最大值 代码实现 /** * Definition for a binary t

s4444sss的博客 279

Axure原型模板与元件库APP交互设计素材(附资料)

在Axure中,手机模型是展示APP或小程序界面效果的重要工具。通过导入手机模型元件,设计师可以更加直观地模拟真实设备的显示效果,从而更准确地评估设计的可行性和用户体验。Axure官方及第三方资源库中提供了多种品牌和型号的手机模型,如iPhone、Android等,设计师可以根据项目需求选择合适的模型进行使用。Axure作为一款强大的原型设计工具,为APP和小程序的设计与开发提供了丰富的界面组件元件库和交互设计素材。

招风的黑耳优快云 1980

WinCC与PLC在西门子逻辑赛项中的通信配置避坑指南

本文针对西门子逻辑赛项中WinCC与PLC通信配置的常见问题,提供了一套实战避坑指南。重点解析了WinCC、PLC与EET仿真平台的三角通信架构,强调了IP地址规划、防火墙设置等关键环节的注意事项,并给出了系统化的故障诊断流程与排查技巧,帮助选手和技术人员快速定位并解决通信故障,确保监控系统稳定运行。

weixin_29165725的博客 107

力扣(14) - 二叉树最大宽度

给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。 示例 1: 输入: 1 / \ 3 2 / \ \ 5 3 9 输出: 4 解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。 示例 2

Touale的博客 655

告别仿真失败!用Sigrity 2022 SystemSI搞定DDR4信号质量仿真的保姆级流程

本文详细介绍了如何使用Sigrity 2022 SystemSI工具进行DDR4信号完整性仿真,提供了一套避免仿真失败、提高仿真精度和加速仿真流程的保姆级方法。从模型验证、设计数据预处理到拓扑构建和参数提取,再到高级调试技巧和仿真加速方案,帮助硬件工程师系统性地解决DDR4信号质量仿真中的常见问题。

weixin_42537499的博客 342

力扣解题思路:662. 二叉树最大宽度 纠错记录

662. 二叉树最大宽度 思路: 最开始我的想法是直接BFS,然后记录每一层从左到右的节点,遍历完一层后去掉左右的空节点,中间的节点数就是宽度了,然后就有: public int widthOfBinaryTree(TreeNode root) { if(root == null) return 0; Queue<TreeNode> queue = new LinkedList<>(); queue.add(root);

qq_39879315的博客 288

【从0到1实战】C# WinForm开发工业级PLC监控系统(完整串口+Modbus RTU/TCP+数据库存储+源码+避坑指南)

做C#工控上位机开发的工程师,尤其是刚入行的新人,最核心的刚需就是开发一套完整的PLC监控系统。这也是工控领域最基础、最核心、应用最广的项目类型——小到单台PLC的设备测控,大到整线的产线监控,本质都是「上位机与PLC通讯,实现数据采集、参数下发、状态监控、数据存储」。碎片化的知识点学了很多,串口会用了、Modbus协议看了、数据库也懂点,但是始终无法把这些知识点串联起来,做出一套能落地的工业级PLC监控系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1559

【C语言】初识C语言(上篇)

初识C语言第一部分

StackFrame 4009

LeetCode-662-二叉树最大宽度

LeetCode-662-二叉树最大宽度

weixin_44939170的博客 447

18|AI 辅助精准测试:让平台会解释、会总结、会推荐

本文介绍 AI 在精准测试平台中的落地方式,包括变更摘要、风险解释、补测建议和报告总结。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。从报告中提取变更文件、未覆盖行、推荐用例。拼成结构化 JSON。让 AI 生成 200 字质量摘要。把摘要展示在报告顶部。读完本文后,可以复制下面的 Prompt,让 AI 生成一个报告总结练习。你是一名 AI 应用开发专家和测试架构师。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 55

力扣 662 :二叉树最大宽度

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

软件科学-郝学胜 802

最新的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节点也计入长度)之间...

xxx_gt的博客 412

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。...

lingjinyue的博客 862

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

weixin_45405425的博客 777

力扣662:二叉树的最大宽度

力扣662:二叉树的最大宽度。C语言

m0_56332819的博客 572

Leetcode 662:二叉树的最大宽度

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

weixin_35338624的博客 101

每日一题:Leetcode-662 二叉树最大宽度

力扣题目解题思路java代码。

LIUCHANGSHUO的博客 638

LeetCode 662:二叉树最大宽度

二叉树的最大宽度

机械工程跑路哥 181

图解LeetCode——662. 二叉树最大宽度(难度:中等)

对于编号的存储,我们可以创建一个对象,里面包含编号和TreeNode这两个变量,也可以使用JDK内置的Pair对象,由于本题中,节点的val值没有任何用处,所以,编号我就存储到了val属性值中,这样更易于存储和获取。构建虚拟的空节点虽然可以满足题目的计算逻辑,但是,由于要大量的创建空的虚拟节点,而且越到层级越深且该层级真是节点越少,那么创建的空节点将会非常的多,那么在提交的时候,就会。那么,由于没有子节点就创建空的虚拟节点,如果不添加某个判断条件,这种构建空节点的操作将会无限的创建下去。...

爪哇缪斯的博客 1459

JAVA程序设计:二叉树最大宽度(LeetCode:662)

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

信仰.的博客 1369

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...

心之所向 258

leetcode:662. 二叉树最大宽度【bfs + 二叉树序号】

二叉树序号。

小楼一夜听春雨 383

LeetCode662:二叉树最大宽度(二叉树非典型最大宽度,BFS层序遍历重编号)

给你一棵二叉树的根节点 root ,返回树的 最大宽度。树的 最大宽度 是所有层中最大的 宽度。每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的 null 节点,这些 null 节点也计入长度。题目数据保证答案将会在 32 位 带符号整数范围内。示例 1:输入:root = [1,3,2,5,3,null,9]输出:4。

shanshan的博客 703
上一篇: 力扣:数组中两元素的最大乘积
下一篇: 力扣:793. 阶乘函数后 K 个零
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值