java数据结构与算法刷题-----LeetCode637. 二叉树的层平均值

手把手教你学Simulink——基于Simulink的PMSM MTPA + FW 全速域平滑切换策略 本文提出一种基于Simulink的PMSM全速域平滑切换控制策略,通过融合MTPA和弱磁控制(FW)实现基速附近的无冲击过渡。在过渡区采用加权融合电流给定方法,使电流超调<5%、转速波动<2%,全速域效率>90%。文章详细介绍了系统架构、核心算法及Simulink建模步骤,包括融合控制器设计、切换逻辑实现和参数优化。仿真结果表明,该方法相比传统硬切换显著改善了动态性能,并扩展了调速范围。同时提供了可直接复用的工程模板和MATLAB代码,为电机控制工程师提供了实用的全速域控制解决方案。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路:时间复杂度O(n),空间复杂度O(n)
  1. 使用广度优先遍历,按层遍历即可,遍历过程中,记录每层的结点和,最后将其平均数求出
  2. 使用深度优先遍历,需要记录当前结点的层次,然后必须使用一个可以通过下标获取值的容器来记录每个结点值

深度遍历时,将当前结点值累加到当前结点所在层次对应的地方,也就是容器对应下标(下标代表层次)位置。

1. 广度优先

代码:给出两种代码思路,一种是普通做法,第二种是直接在生成容器时,静态构建,因此第二种非常快,作为扩展了解即可
  1. 普通方法
    在这里插入图片描述
class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> list = new ArrayList<>();//答案
        Queue<TreeNode> bfs_queue = new LinkedList<>();//广度优先队列
        bfs_queue.offer(root);//根结点入队列
        while(!bfs_queue.isEmpty()){
            int size = bfs_queue.size();//获取当前层中结点个数
            long sum = 0;//记录当前层结点的和
            for(int i = 0;i<size;i++){//遍历当前层
                TreeNode poll = bfs_queue.poll();//出队列
                sum+=poll.val;//累加
                if(poll.left!=null) bfs_queue.offer(poll.left);
                if(poll.right!=null)bfs_queue.offer(poll.right);
            }
            list.add((double)sum/size);//计算平均值
        }
        return list;
    }
    
}
  1. 进阶方法
    在这里插入图片描述
import java.util.AbstractList;
class Solution {
    public static List<Double> averageOfLevels(TreeNode root) {
        return new AbstractList<Double>() {//直接构建抽象链表
            private final List<Double> list = new ArrayList<>();//此链表保存答案
            private final List<TreeNode> level = new ArrayList<>();//此链表用于深度优先遍历
            @Override
            public Double get(int index) {//此方法为重写链表构建方法,获取指定下标值
                init();//初始化链表
                return list.get(index);//获取值
            }
            @Override
            public int size() {//获取链表值
                init();
                return list.size();
            }
            void init() {//初始化链表
                if (list.isEmpty()) {//如果链表为空,就初始化
                    level.add(root);//广度优先初始化
                    while (!level.isEmpty()) {
                        levelTraverse(level);
                    }
                }
            }
            //广度优先逻辑,统计每层的平均值
            void levelTraverse(List<TreeNode> level) {
                int count = level.size();
                long sum = 0;
                for (int i = 0; i < count; i++) {
                    TreeNode tree = level.get(0);
                    sum += tree.val;
                    if (tree.left != null) {
                        level.add(tree.left);
                    }
                    if (tree.right != null) {
                        level.add(tree.right);
                    }
                    level.remove(0);
                }
                list.add((double) sum / count);
            }
        };
    }
}

2. 深度优先

代码

在这里插入图片描述

class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Integer> counts = new ArrayList<Integer>();//保存每层有几个结点
        List<Double> sums = new ArrayList<Double>();//保存每层结点累加和
        dfs(root, 0, counts, sums);
        List<Double> averages = new ArrayList<Double>();//保存答案
        int size = sums.size();
        for (int i = 0; i < size; i++) {//将每一层累加的结果进行求平均值
            averages.add(sums.get(i) / counts.get(i));
        }
        return averages;
    }

    public void dfs(TreeNode root, int level, List<Integer> counts, List<Double> sums) {
        if (root == null) return;
        if (level < sums.size()) {//如果当前层次不是第一次到达
            sums.set(level, sums.get(level) + root.val);//对应层累加
            counts.set(level, counts.get(level) + 1);//对应层结点个数+1
        } else {//如果第一次到达当前层,创建层次,当前结点值为当前层第一个结点,当前层结点个数为1
            sums.add(1.0 * root.val);//
            counts.add(1);
        }
        //继续遍历
        dfs(root.left, level + 1, counts, sums);
        dfs(root.right, level + 1, counts, sums);
    }
}
已解决“TimeouEror [WinEror 10060由于连接方在一段时间后没有正确答复 或连接的主机没有反应,连接尝试失败“,亲测有效!!! 已解决"TimeouEror [WinEror 10060由于连接方在一段时间后没有正确答复 或连接的主机没有反应,连接尝试失败",亲测有效!!! 阅读详情

相关推荐

手把手教你用Zynq-7100 FPGA实现100Mbps OOK信号定时同步(含完整Verilog代码)

本文详细介绍了如何在Zynq-7100 FPGA平台上实现100Mbps OOK信号的定时同步,涵盖插值算法、Gardner定时误差检测等关键技术。通过完整的Verilog代码和优化技巧,解决了50MHz外部时钟条件下的400MHz采样率同步挑战,为无线通信系统设计提供实用解决方案。

weixin_42522374的博客 301

Java实现 LeetCode 637 二叉树的层平均值(遍历树)

637. 二叉树的层平均值 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11]. 注意: 节点值的范围在32位有符号整数范围内。 /** *...

南 墙 1万+

Cisco Packet Tracer 7.3免登录技巧:3种方法快速跳过注册界面(附详细截图)

本文针对Cisco Packet Tracer 7.3启动时遇到的登录界面问题,提供了三种合法高效的解决方案。详细介绍了如何利用官方访客模式快速启动、注册思科账号实现一劳永逸登录,以及通过调整本地安装配置优化启动流程,帮助网络学习者与备考者绕过繁琐步骤,快速进入实验环境。

weixin_29305337的博客 742

LeetCode题练习与总结:二叉树的层平均值--637

本文详细介绍了如何使用广度优先搜索算法计算二叉树每层节点的平均值,并提供了Java实现代码,分析了时间复杂度和空间复杂度,总结了涉及的关键知识点。

一直学习永不止步 1035

Android Studio无法启动,Failed to create JVM:error code -1. JVM Path 完美解决方案

Android Studio无法启动,Failed to create JVM:error code -1. JVM Path 完美解决方案。 找到Android studio的启动文件bin目录,把studio64.exe.vmoptions 删除或改名(推荐改名,方便恢复),如果你是32位系统这个文件就是 studio.exe.vmoptions

陈万洲的专栏 4850

智算中心建设项目初步设计方案

本项目面向区级政府、智算中心及文旅从业者,聚焦某区智算中心一期建设,响应数字经济与智慧城市建设政策,推动文旅产业升级。遵循统筹规划、数据驱动原则,目标打造智慧文旅样板。建设内容涵盖云网数据底座(以租代建)、数据中台(全生命周期管理)、智慧文旅平台(含“一机游”电商)及气象监测等配套,采用前后端架构与低代码开发,强化三级等保与纵深防御,实现安全可控。方案融合多类资源目录,提供从设计到运营的完整技术支撑,助力区域智算与文旅深度融合。

cdfunlove的博客 111

Leetcode刷题java之637. 二叉树的层平均值

执行结果: 通过 显示详情 执行用时 :5 ms, 在所有 Java 提交中击败了89.30% 的用户 内存消耗 :44.8 MB, 在所有 Java 提交中击败了59.61%的用户 题目: 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14....

逆水行舟,不进则退 944

BUG调试案例一:RK3588+YT8531网络无法PING通调试案例

在使用 RK3588 搭配 YT8531S PHY 芯片进行网络调试时,遇到了“网络无法 Ping 通”的棘手问题。排查了两天,终于找到问题原因。为了避免大家在类似项目中走弯路,也为了加深自己对调试细节的理解,我们特意整理了本次问题的完整排查过程。本篇文章将围绕以下四个方面展开分享: 问题现象&描述 调试过程&分析 问题根源定位 注意事项提醒 举一反三(走两步)

案例文章,高速信号 2336

637. 二叉树的层平均值

LeetCode: 637. 二叉树的层平均值 思路: 树的层序遍历,使用到队列,先进先出 计算出每一层拥有多少个节点 从根节点加入 Queue 中,queue.size() — for 得出一层的节点数量, 先处理完一层 提交代码 public class Daily637 { public List<Double> averageOfLevels(TreeNode root) { List<Double> res = new ArrayLis

lankerens 315

把 ABAP ALV 表头做成两层分组:用 TOP-OF-PAGE 手工绘制双行列标题

摘要:本文介绍了在SAP ALV List中实现双层表头的方法。通过关闭系统默认列标题(no_colhead='X'),在TOP_OF_PAGE事件中手动绘制表头,使用sy-uline和sy-vline绘制线条实现分组效果。关键点包括:1)关闭系统表头;2)在事件处理中分两行输出分组标题和字段名;3)利用系统自动拼接线条的特性绘制表格边框。文中还指出了常见问题如线条自动粘连、颜色不生效等,并提供了完整示例代码和详细解释。这种方法适用于需要对字段进行业务分组的报表场景。

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

栅格数据做相关性分析前的预处理(批量定义投影、栅格投影、重采样)

最近在做两个栅格数据的相关性分析,这个最主要的是两个栅格数的行列号是一致的(也就是说坐标系、分辨率一致),那么标准的栅格数据的分辨率是以米的形式存在的,但是有一些栅格数据是以度为单位存在的,所以在做分析前,一定要先把其转换为米,否则在重采样的时候就会出错。(相关文章——栅格数据以度为单位变为以米为单位的简单做法)当然,在变其分辨率的单位前,一定要将其坐标系转换为一致。所以就有以下的步骤(如何将两个栅格数据的坐标系、分辨率的单位和分辨率一致) 1.首先,要看两个栅格数据的坐标系是否一致,如果不一致,要先统一到

qq_41828818的博客 8351

leetcode刷题记录 637 二叉树的层平均值

leetcode 637 二叉树的层平均值 解题思路: 1.可以采取广度遍历,用两个queue存放结点,一个存放第i层的结点,另外一个存放下一层节点。然后遍历完一层就计算其平均值,存入list中。 class Solution { public List<Double> averageOfLevels(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List

weixin_40453090的博客 167

STM32入门教程:车牌识别

在本文中,我们介绍了如何使用STM32实现车牌识别功能,并提供了详细的代码案例。通过以上步骤,你可以开始开发自己的车牌识别系统了。希望本文对你有所帮助!

2401_85258012的博客 874

[LeetCode] 637.二叉树的层平均值(java实现)

[LeetCode] 637.二叉树的层平均值(java实现)1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 637.二叉树的层平均值 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。 2. 读题(需要重点注意的东西) 难点在于如何控制每一层的输出。 3. 解法 解法:BFS /** * Definition for a binary tree node. * public class TreeNode {

cloud的博客 329

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode 637. 二叉树的层平均值(Average of Levels in Binary Tree)

637. 二叉树的层平均值 637. Average of Levels in Binary Tree LeetCode637. Average of Levels in Binary Tree 题目描述 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14.5, 11]...

weixin_30241919的博客 125

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【leetcode刷题记录】(java)二叉树

【leetcode刷题记录】(java)二叉树 刷题参考代码随想录:https://programmercarl.com/

南京大学软件工程硕士在读 1318

leetcode 637.二叉树的层平均值 Java

二叉树的层平均值题目链接描述示例代码BFSDFS 题目链接 https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/ 描述 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。 示例 示例1 输入:[3,9,20,15,7] 输出:[3, 14.5, 11] 代码 BFS /** * Definition for a binary tree node. * public class TreeNode { *

博主是个二次元死肥宅~ 285

leetcode【每日一题】637. 二叉树的层平均值 Java

题干 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出:[3, 14.5, 11] 解释: 第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。 提示: 节点值的范围在32位有符号整数范围内。 想法 经典bfs啊 只需要每层的时候增加一个变量计算和 bfs实现: 使用队列,把根结点放入队列,当队列不为空的时候就循环 我们在每次取出

qq_43491066的博客 205

LeetCode 637. 二叉树的层平均值 JAVA

给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出:[3, 14.5, 11] 解释: 第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。 提示: 节点值的范围在32位有符号整数范围内。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/average-of-leve

sinb妃的博客 156

Leetcode 637.二叉树的层平均值

Leetcode 637.二叉树的层平均值 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例1: 题目解释 从题意来看,这个就是二叉树层次遍历的变种题,所以如果掌握了二叉树的层次遍历,这个问题就迎刃而解。 方法解答 教科书般的解答,层次遍历,最先想到的肯定是队列。忘记了的同学赶紧捡起书本好好的复习一下。 代码: ...

Gary___的博客 614

leetcode 637. 二叉树的层平均值(两个栈)

二叉树的层平均值 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出:[3, 14.5, 11] 解释: 第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。 提示: 节点值的范围在32位有符号整数范围内。 解题思路 这题我使用两个栈去解决。 1.首先需要两个栈s1,s2,遍历第一层时,存入s1,然后从s1中开.

weixin_43960668的博客 181

【二叉树】Leetcode 637. 二叉树的层平均值【简单】

第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11。因此返回 [3, 14.5, 11]。

FLGB 560

leetcode 637:二叉树层的平均值(详细解答+源代码)

给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / 9 20 / 15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11]. 注意: 节点值的范围在32位有符号整数范围内。 基本思路: 这个问题本质是层次遍历,但是在层次遍历的基础上要增加对每层的叶子节...

weixin_43484977的博客 292
上一篇: java数据结构与算法刷题-----LeetCode671. 二叉树中第二小的节点
下一篇: java数据结构与算法刷题-----LeetCode230. 二叉搜索树中第K小的元素
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值