leetcode637. 二叉树的层平均值,广度优先搜索BFS

news2024/9/19 14:54:00

leetcode637. 二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

示例 1:
在这里插入图片描述
输入:root = [3,9,20,null,null,15,7]
输出:[3.00000,14.50000,11.00000]
解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。

示例 2:
在这里插入图片描述
输入:root = [3,9,20,15,7]
输出:[3.00000,14.50000,11.00000]
在这里插入图片描述

题目分析

  • 问题定义:计算二叉树每层节点的平均值。
  • 数据结构:使用二叉树的数据结构,其中TreeNode是一个节点,包含值val和指向左右子节点的指针。

算法介绍

  • 广度优先搜索(BFS):使用队列来实现广度优先搜索,以层序遍历树中的每个节点。

算法步骤

  1. 初始化一个空向量averages来存储每层的平均值。
  2. 初始化一个队列q,并将根节点root放入队列中。
  3. 当队列不为空时,进行以下操作:
    • 重置当前层的总和sum为0。
    • 记录当前队列的大小size,这代表当前层的节点数。
    • 遍历当前层的每个节点:
      • 从队列中取出一个节点,将其值加到sum上。
      • 如果该节点有左子节点,将其加入队列。
      • 如果该节点有右子节点,将其加入队列。
    • 计算当前层的平均值sum/size,并将其添加到averages向量中。
  4. 返回averages向量。

算法流程

初始化 averages 向量
初始化队列 q 并加入根节点
队列是否为空?
结束
计算当前层总和和节点数
遍历当前层节点
是否有子节点?
更新总和并将子节点加入队列
计算并存储平均值

算法分析

  • 时间复杂度:O(n),其中n是树中节点的数量。每个节点都被访问一次。
  • 空间复杂度:O(m),其中m是树中最大层的节点数。队列中最多可能包含该层的所有节点。
  • 易错点:正确处理每一层的节点数量和总和的计算。

相似题目

题目链接
637. 二叉树的层平均值LeetCode
102. 二叉树的层序遍历LeetCode
429. N叉树的层序遍历LeetCode

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

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

相关文章

跑通llama-factory

1.在ubuntu下安装环境 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e “.[torch,metrics]” pip install --no-deps -e . 在本地windows,打开http://0.0.0.0:7863/,总是显示无法打开界面。 之后在…

!!学习整理知识模块——关于【如何本地搭建Whisper语音识别模型】/请按需收藏!!

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

经验风险最小化和极大似然估计的关系

一、经验风险定义 给定一个训练数据集 T { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T{(x1​,y1​),(x2​,y2​),...,(xN​,yN​)},模型f(X)关于训练数据集的平均损失称为经验风险(Empirical…

冻死你都觉得简单

小说大纲 标题:《学霸的豪门对决》 背景设定: 两个家族在商业界拥有举足轻重的地位,但因为历史原因,两家长期处于竞争状态。主角们在顶级私立学校就读,既是学霸也是家族的继承人。 主要人物: 男主角&a…

【前端开发必备小技巧】前端代码规范Vue篇

文章目录 🟢 前端代码规范🟢 一、前端代码规范Vue篇👉1、Vue编码基础👉1.1、组件规范👉1.2、模板中使用简单的表达式👉1.3、指令都使用缩写形式👉1.4、 标签顺序保持一致👉1.5、必须…

<数据集>车辆识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3002张 标注数量(xml文件个数):3002 标注数量(txt文件个数):3002 标注类别数:21 标注类别名称:[ambulance, army vehicle, auto rickshaw, bicycle, bus, car, garba…

互联网平台大模型网络架构设计

字节跳动:大模型网络实践分享 自2019年起,字节跳动公司便开始着手白盒项目。2020年,推出了首款接入交换机——25G型号,随后逐步实现软硬件的自主研发。在当前一代产品中,已经实现了100G接入、25.6T400G互联&#xff0c…

SprinBoot+Vue实验室考勤管理小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

信息学奥赛一本通/openjudge Crossing River

题目 一本通题目入口 openjudge题目入口 (注:由于一本通题面描述的可能有些欠缺,所以这里的题面采用openjudge英文翻译后的题面) 题目分析 首先我们来看样例,为什么样例的结果是17呢?首先观察,“5”和“…

node环境安装、vue-cli搭建过程、element-UI搭建使用过程

vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速 前端项目架…

Spark-Job启动、Stage划分

一、上下文 《Spark-driver和executor启动过程》详细分析了driver和executor的启动,此时资源已经给我们分配好了,且Application也已经注册完成。下面我们就来看看Spark是如何启动job并根据DAG来划分Stage的 二、Job启动 Spark RDD中的算子分为Transfo…

leetcode算法题之 K 个一组翻转链表

照我说这道题其实是披着困难皮的中等题目,问题如下: 题目地址 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍…

深入解析多商户商城系统源码:如何开发直播商城小程序?

本篇文章,小编将深入解析多商户商城系统源码的关键技术,并详细探讨如何基于这些源码开发一个功能完善的直播商城小程序。 一、多商户商城系统源码的核心构架 多商户商城系统源码的核心在于其能够支持多个商户独立运营,但同时又在一个统一的平…

(转载)内存分配器101——写一个简单的内存分配器

文章目录 前提正文Malloc()free()calloc()realloc() 前提 之前学习过手写一个简单的内存分配器,原文是英文的,当初学习的时候便将英文翻译为中文的,方便阅读,当然和原文相比少了点味道。今天整理资料的时候看到了自己的翻译&…

为什么越来越多的助贷中介公司做债务重组?

大家有没有注意到个现象?现在越来越多的助贷中介公司和专门做债务重组的公司一起“合作”了。有的是接了单转手给重组公司,有的则是亲自下场,用自有资金做起了重组的事情。为什么会这样呢?好端端的贷款中介不做,偏要蹚…

RabbitMQ练习(Remote procedure call (RPC))

1、RabbitMQ教程 《RabbitMQ Tutorials》https://www.rabbitmq.com/tutorials 2、环境准备 参考:《RabbitMQ练习(Hello World)》。 确保RabbitMQ、Sender、Receiver容器正常安装和启动。 rootk0test1:~# docker run -it --rm --name rab…

前端内存泄露案例与解决方案

什么是内存泄漏? 内存泄露(Memory Leaks):是指应用程序已经不再需要的内存,由于某种原因未返回给操作系统或者空闲内存池(Pool of Free Memory)。 内存泄露可能带来的问题:变慢、卡…

SAP LE学习笔记07 - MM与WM跨模块收货到仓库的流程中 如何实现 先上架再入库

上一章讲了LE中收货的一些特殊情况: 1,MM模块收货时,特别移动指标来标识的物料直接产生TO 2,MM中直接收货到仓库的固定Storage Bin(棚番)上 SAP LE学习笔记06 - MM与WM跨模块收货到仓库的流程中 带特别移动指标的物料也可以直接…

spring security 会话管理

一、简介 当浏览器调用登录接口登录成功后,服务端会和浏览器之间建立一个会话(Session)浏览器在每次发送请求时都会携带一个 Sessionld,服务端则根据这个 Sessionld 来判断用户身份当浏览器关闭后,服务端的 Session 并不会自动销毁&#xff0…

结构型设计模式-适配器(adapter)模式-python实现

设计模式汇总:查看 通俗示例 想象一下,你刚从国外带回一台最新的笔记本电脑,但是你发现它的电源插头是德标插头,而家里的电源插座是中式插座,这时怎么办呢?你需要一个电源适配器来将德标插头转换成中式插座…