【算法分析与设计】最大层内元素和

       📝个人主页:五敷有你      

 🔥系列专栏:算法分析与设计

⛺️稳中求进,晒太阳

题目

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。

请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

示例

示例 1:

输入:root = [1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。

示例 2:

输入:root = [989,null,10250,98693,-89388,null,null,null,-32127]
输出:2

思路(树的层次遍历的简单变形)

树的层次遍历是一种按照树的层级顺序逐层遍历节点的方法。在层次遍历中,首先访问树的根节点,然后依次访问每一层的节点,从上到下、从左到右地顺序访问。这种遍历方式通常使用广度优先搜索(BFS)算法实现。

具体步骤如下:

  1. 从树的根节点开始,将根节点放入队列中。
  2. 从队列中取出一个节点,访问该节点。
  3. 将该节点的所有子节点(如果有)依次放入队列中。
  4. 重复步骤 2 和步骤 3,直到队列为空。

层次遍历的特点是,它保证了在遍历过程中,同一层的节点会先于下一层的节点被访问。这种遍历方式对于需要按层级处理树节点的情况非常有用,例如在解决本问题中,需要计算每一层节点的元素之和,因此使用层次遍历能够很方便地实现这个目标。

代码实现

/*** Definition for a binary tree node.* public 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;*     }* }*/
class Solution {public int maxLevelSum(TreeNode root) {Queue<TreeNode> queue=new LinkedList();queue.offer(root);int maxValue=Integer.MIN_VALUE;int minEle=Integer.MAX_VALUE;int minFloor=0;int floor=0;while (!queue.isEmpty()){int size=queue.size();int sum=0;floor++;for(int i=0;i<size;i++){TreeNode node=queue.poll();if(node.left!=null) queue.offer(node.left);if (node.right!=null) queue.offer(node.right);sum+=node.val;}if(sum>maxValue){maxValue=sum;minFloor=floor;}}return minFloor;}
}

运行结果 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:【完全零基础】认知人工智能(一)【超级简单】的【机器学习神经网络】 —— 预测机

开个头 很多小伙伴们很想亲近人工智能与机器学习领域&#xff0c;然而这个领域里的核心理论、算法、工具给人感觉都太过“高冷”&#xff0c;让很多小伙伴们望而却步&#xff0c;导致一直无法入门。 如何捅破这层窗户纸&#xff1f; 让高冷的不再高冷&#xff0c;让神秘的不…

防御保护第五次作业

此处实验共有七个需求 一、 需要新建两个nat转换策略来实现电信和移动的的分开处理&#xff0c;如下&#xff1a; 上面要求的保留地址在设置地址池的时候进行预留&#xff0c;转换的地址池也看个人设置的范围&#xff0c;别忘了这两个的安全策略也要放通&#xff0c;结果如下…

JAVA面试虚拟机篇

1. JVM 内存结构 要求 掌握 JVM 内存结构划分 尤其要知道方法区、永久代、元空间的关系 结合一段 java 代码的执行理解内存划分 执行 javac 命令编译源代码为字节码 执行 java 命令 创建 JVM&#xff0c;调用类加载子系统加载 class&#xff0c;将类的信息存入方法区 创建…

2023年年度总结2024年规划

一、前言 本来去年年底写的&#xff0c;但去年年底想着写了没啥意义就没搞&#xff0c;今天开工第一天&#xff0c;寻思着还是要写一篇总结&#xff0c;进行对去年的整体复盘和对今年的发展规划。 二、2023年总结 2.1、工作历程总结 从2022年7月毕业后的一个工作历程。毕业后…

【计算机毕业设计】093厨艺交流平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Vue首屏优化,12个提速建议

文章目录 代码拆分和懒加载&#xff1a;代码拆分懒加载 图片优化&#xff1a;组件懒渲染&#xff1a;数据预获取和缓存&#xff1a;服务器端渲染&#xff08;SSR&#xff09;&#xff1a;代码压缩和合并&#xff1a;使用 CDN 加速&#xff1a;监控和性能分析&#xff1a;代码优…

MySQL(基础)

第01章_数据库概述 1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多…

C语言程序设计(第四版)—习题10程序设计题

1.判断满足条件的三位数 编写一个函数&#xff0c;利用参数传入3位数n&#xff0c;找出101~n间所有满足下列两个条件的数&#xff1a;它是完全平方数&#xff0c;又有两位数字相同&#xff0c;如144、676等&#xff0c;函数返回找出这样的数据的个数。试编写相应程序。 本题要…

反编译调试C#编写的exe软件和dll方法详解

1.首先需要下载软件dnSpy.exe&#xff0c;下载地址&#xff1a;https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8 2.使用方法&#xff1a; 首先打开项目&#xff0c;我们这里可以选择dll&#xff0c;也可以选择exe 这边我们是打开了一个WPF写的客户端软件。 2.打开后我…

Nginx实战:日志按天分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、方式1&#xff1a;定时任务执行分割脚本 1.分割日志脚本 2.添加定时任务 二、方式2&#xff1a;logrotate配置分割 1.logrotate简单介绍 2.新增切割ngi…

leetcode日记(31)缺失的第一个正数

挺简单的困难题 class Solution { public:int firstMissingPositive(vector<int>& nums) {sort(nums.begin(),nums.end());int nnums.size();int i0;bool b0;if(nums[0]>0) b1;int p1;for(;i<n;i){if(i1>0&&i1<nums.size()&&nums[i]<…

自然语言编程系列(三):自然语言编程工具

自然语言编程工具尝试让用户以更接近日常对话的方式描述任务&#xff0c;然后将其自动转换成合适的代码。 自然语言编程工具&#xff08;Natural Language Programming, NLP&#xff09;旨在降低编程门槛&#xff0c;使得不具备传统编程技能的用户能够以他们习惯的日常对话方式…