LeetCode 637. 二叉树的层平均值

news2024/11/24 0:16:26

637. 二叉树的层平均值

描述

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

示例

示例1
示例1

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例2

输入:root = [1]
输出:[[1]]

示例3

输入:root = []
输出:[]

链接

https://leetcode.cn/problems/average-of-levels-in-binary-tree/

解题思路

思路一: 广度优先遍历

  • 首先根元素入队
  • 当队列不为空的时候
  • 求当前队列的长度length
  • 依次从队列中取 length个元素进行拓展,然后进入下一次迭代
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var averageOfLevels = function(root) {
    let res = [], queue = [root];
    while (queue.length) {
        let currentLevelSize = queue.length, sum = 0;
        for (let i = 1; i <= currentLevelSize; ++i) {
            let node = queue.shift();
            sum += node.val; 
            if (node.left !== null) queue.push(node.left);
            if (node.right !== null) queue.push(node.right);
        }
        // 将每一层均值放进结果集
        res.push(sum / currentLevelSize);
    }
    return res
};

时间复杂度: O(n), 其中 n 是二叉树的节点数
空间复杂度: O(n)

思路二: 深度优先搜索

使用深度优先搜索计算二叉树的层平均值,需要维护两个数组,counts 用于存储二叉树的每一层的节点数,sums 用于存储二叉树的每一层的节点值之和。搜索过程中需要记录当前节点所在层,如果访问到的节点在第 i 层,则将counts[i] 的值加 1,并将该节点的值加到sums[i]。

遍历结束之后,第 i 层的平均值即为 sums[i]/counts[i]
实现代码如下:

var averageOfLevels = function (root) {
   let res = [], sums = [], counts = [];
   const dfs = function (node, depth, counts, sums) {
      if (node === null) return;
      if (depth < sums.length) {
          sums[depth] += node.val;
          counts[depth]++;
      } else {
          sums.push(node.val);
          counts.push(1);
      }
      dfs(node.left, depth + 1, counts, sums);
      dfs(node.right, depth + 1, counts, sums);
  }
    dfs(root, 0, counts, sums);
    let len = sums.length;
    for (let i = 0; i < len; i++) {
        res.push(sums[i] / counts[i]);
    }
    return res;
}

时间复杂度: O(n), 其中 n 是二叉树的节点数
空间复杂度: O(n)

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

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

相关文章

大家都在用哪些研发协同、沟通协同、项目协同软件?

这里我们将根据需求将协同软件分为&#xff1a;项目管理协作沟通、研发管理协同、文档协同、会议协同、设计协同、沟通协同6个大类进行分别推荐。 随着企业对高效协同办公的需求日益增长&#xff0c;市场上出现了众多协同办公软件。这些软件通过提供各种实用的功能&#xff0c;…

ChatGPT访问互联网,不神秘了

我测试了一下&#xff0c;它其实调用了微软必应的api&#xff0c;搜索了关键词而已 比如我问它&#xff1a;https://twitter.com/elonmusk 马斯克最近在忙什么 它的回答是&#xff1a; 近期&#xff0c;马斯克在做的一些事情包括&#xff1a; 在2023年的特斯拉年度股东大会…

内网渗透(七十七)之域权限维持之ACL滥用(中)

ACL滥用(中) 3、msDS-AllowedToActOnBehalfOfOtherldentity 属性权限 如图所示是微软对于msDS-AllowedToActOnBehalfOfOtherldentity 属性的描述 jack是域中的一个普通用户。现在我们获得了域管理员的权限,并想进行权限维持,可以进行如下的操作:使用Empire下的powerview…

编译zlib

zlib被设计为一个免费的&#xff0c;通用的&#xff0c;法律上不受限制的-即不受任何专利保护的无损数据压缩库&#xff0c;几乎可以在任何计算机硬件和操作系统上使用。 官网&#xff1a;http://www.zlib.net/ 下载zlib源码:http://www.zlib.net/zlib1213.zip 备用地址&#x…

opencv图像拼接

opencv图像拼接是一种在一系列图片中选取部分区域&#xff0c;通过这些区域的重叠得到一个完整的图像&#xff0c;并将这些图片拼接起来的方法。它与传统的方法不同&#xff0c;可以看作是基于拼接技术的图像处理。 opencv是一款开源的图像处理软件&#xff0c;主要用于计算机视…

看模型、做技术交底、做项目汇报,图新说数字化汇报平台引领交互式汇报新模式

现场汇报效果不好&#xff0c;导致丢了一个项目&#xff01; 项目汇报平淡无奇&#xff0c;方案屡次被毙&#xff01; 面对专家质疑&#xff0c;回答苍白无力&#xff01; 估计大家都有过这种经历和感受。 详细分析一下&#xff0c;基本上有以下几个方面的原因&#xff1a; …

ASEMI代理Infineon英飞凌IPB60R099CP原厂MOS管

编辑-Z IPB60R099CP参数描述&#xff1a; 型号&#xff1a;IPB60R099CP 持续漏极电流&#xff1a;31A 脉冲漏极电流&#xff1a;93A 雪崩电流&#xff0c;重复&#xff1a;11A 栅极-源极电压&#xff1a;20V 功率耗散&#xff1a;255W 操作和储存温度&#xff1a;-55 t…

Springer期刊 latex投稿经验分享

Springer Nature期刊的latex模板下载: Download the journal article template package 以MTAP为例(修改之后对修订稿的投递过程) 第一步:将您的文章提交到适当的期刊轨道或特刊。 如有必要,从下拉菜单中更改您提交的文章类型。 然后点击Proceed 第二步: 与您提交的先前修…

Jmeter +Maven+jenkins 接口性能全自动化测试

背景&#xff1a; 首先用jmeter录制或者书写性能测试的脚本&#xff0c;用maven添加相关依赖&#xff0c;把性能测试的代码提交到github&#xff0c;在jenkins配置git下载性能测试的代码&#xff0c;配置运行脚本和测试报告&#xff0c;配置运行失败自动发邮件通知&#xff0c…

陪诊小程序开发|陪诊系统源码|陪诊系统开发

近年来&#xff0c;一个新兴的产业异军突起。 专业陪诊医生主要是陪一些孩子不在身边的老人&#xff0c;或者家人不在身边的孕妇&#xff0c;看病、检查等&#xff0c;其实这个小程序不只是看病而已 . &#xff0c;以及更多功能。 配套小程序功能展示&#xff1a; 1、预诊预约…

23种设计模式之桥接模式(Bridge Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的桥接模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

【Selenium下】——全栈开发——如桃花来

目录索引 获取元素信息&#xff1a;获取单个文本和属性&#xff1a;*获取文本&#xff1a;**获取属性&#xff1a;* 获取多个文本和属性值&#xff1a; 等待&#xff1a;显示等待&#xff1a;time等待&#xff1a; EC&#xff1a;常见方法&#xff1a; 前进后退:选项卡管理&…

同步管理1000个设备的VLAN数据,这都行?

大家好&#xff0c;我是老杨。 很多网工在工作中&#xff0c;经常会遇到企业网的交换机上需要保持VLAN信息同步的情况。 因为只有这样&#xff0c;才可以以保证所有交换机都能进行正确的数据转发。 小型企业网中&#xff0c;你可以直接登录到每台交换机上进行VLAN的配置和维…

使用Atmel Studio开发Arduino的ATmega328P单片机

摘要&#xff1a;我们知道Arduino开发板常用的芯片是Atmel公司生产的AVR微控制器系列。最常见的是ATmega328P&#xff0c;被广泛用于Arduino Uno开发板。其他常用的AVR芯片包括ATmega2560和ATmega32U4。使用Arduino平台开发AVR的单片机非常方便。Arduino IDE提供了一个非常简洁…

中睿天下成为国家信息安全漏洞库(CNNVD)一级技术支撑单位

近日&#xff0c;中国信息安全测评中心公布2023年度国家信息安全漏洞库技术支撑单位名单&#xff0c;中睿天下荣获中国信息安全测评中心颁发的“国家信息安全漏洞库&#xff08;CNNVD&#xff09;技术支撑单位等级&#xff08;一级&#xff09;证书”&#xff0c;成为该领域最高…

在tomcat中手动部署应用

以maven做为构建工具的web应用为例&#xff0c;如下图&#xff1a; 在tomcat中运行应用&#xff0c;运行的是应用的字节码文件&#xff0c;所以我先执行package生命周期&#xff0c;新增target文件夹&#xff0c;如下&#xff1a; 打开上面的war文件&#xff0c;跟第一个红框里…

Gradio的web界面演示与交互机器学习模型,全局状态与会话状态《4》

全局状态和会话状态&#xff0c;对于程序员来说都是很熟悉的了&#xff0c;开发中会经常遇到&#xff0c;这里看下在Gradio中是怎么使用的&#xff0c;以及对GPT2的一点介绍 一、Global State全局状态 如果定义的函数想要访问外部的数据&#xff0c;可以将变量写在外面成为一…

赛效: 用佐糖办公工具怎么黑白照片上色

了解更多办公工具的相关应用教程&#xff0c;可到赛效官方网站查看应用软件或应用问答栏目了解更多~ 老旧的照片一般是黑白色&#xff0c;黑白色的照片看起来比较陈旧&#xff0c;这时候可以借助一些在线处理图片的工具来还原照片的颜色&#xff0c;哪些在线办公工具支持给黑白…

动环监控系统这个用途,简直太实用了!

烟草仓库对环境要求高&#xff0c;而人工管理库房无法做到24小时的检查管理&#xff0c;如果突发高温、潮湿等现象&#xff0c;易引发霉变、虫蛀等情况&#xff0c;导致出现损失。 为了提高烟草的存放质量&#xff0c;达到防治霉菌的目的&#xff0c;减少人为监测存在误差而造成…

融云跨平台 SDK 自动生成技术的探索和实践

移步【融云全球互联网通信云】回复“地图”免费领 移步公众号报名报名 WICC 出海嘉年华 作为即时通讯云的领创品牌&#xff0c;融云的通信云产品广泛地服务于社交沟通、直播互动、实时社区、商业沟通等场景。关注【融云全球互联网通信云】了解更多 随着应用场景的丰富和开发…