LeetCode # 1161. 最大层内元素和

1161. 最大层内元素和

题目

给你一个二叉树的根节点 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

分析

题目要求返回第n层之内元素之和最大的最小层数,自上而下,第一次遇到最大元素之和就是最小的层,使用广度优先遍历,一层一层向下。
如果使用深度优先,需要一个数组来维护每层元素之和,和树的深度

题解

广度优先遍历
class Solution {
    public int maxLevelSum(TreeNode root) {
        // 返回层内元素之和最大的层号,且是最小的层号

        // 广度优先遍历,一层一层向下,遇到最大值就记录层号(深度),返回最大值的层号,因为是从上向下遍历,如果没有更大值,那么当前的最大值就是最小层

        // 队列,保存每一层的节点,队列是动态的,只保存一层的节点
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);

        // 树的深度、初始最大值、最大值的深度
        int dept = 0;
        int max = Integer.MIN_VALUE;// 这个max要取最小值,初始不能为0,因为题目要求可以出现负数
        int max_dept = 0;

        // 广度优先,将每一层依次入队,并依次遍历这个节点的左右子节点,作为下一层的父节点
        while(!queue.isEmpty()){
            // 获取上一层节点的子节点数量,就是这一轮需要遍历的
            int size = queue.size();
            dept++;

            // 因为这不是递归,而是while循环,所以只有一个sum,初始时为0
            int sum = 0;

            for(int i = 0; i < size; i++){
                // 取出一个节点,计入sum
                TreeNode node = queue.poll();
                sum += node.val;

                // 将这个节点的左右子节点入队,用于下一层的遍历
                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }

            }
            // 自上而下,第一次遇到最大值就是最小的层号,不使用=>判断
            // 因为题目要求计算各层元素之和,所以每层遍历完再计算最大值
            if(sum > max){
                max = sum;
                max_dept = dept;
            }
        }
        return max_dept;
    }
}
深度优先遍历
class Solution {

    private List<Integer> sum = new ArrayList<>();

    public int maxLevelSum(TreeNode root) {
        // 广度优先,利用数组,数组长度为树的层数,数组值为每层之和

        dfs(root, 0);
        int ans = 0;
        for(int i = 0; i < sum.size(); i++){
            if(sum.get(i) > sum.get(ans)){
                ans = i;
            }
        }
        return ans + 1;
    }

    // 深度优先
    private void dfs(TreeNode node, int level){
        
        if(level == sum.size()){
            // 为什么直接加,每一层的第一个,每一个新的深度,因为之前没有所以直接add加,之后有了这个level,就可以get(level)+val了
            sum.add(node.val);
        }else{
            // 根据level,取出之前的层数和,然后加上当前节点值,组合成每层之和
            sum.set(level, sum.get(level) + node.val);
        }
        if(node.left != null){
            dfs(node.left, level + 1);
        }
        if(node.right != null){
            dfs(node.right, level + 1);
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Consul】注册Consul服务时报错404

【Consul】注册Consul服务时报错404 大家好 我是寸铁&#x1f44a; 总结了一篇golang注册Consul服务时报错404✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 今天寸铁想注册一个服务到Consul服务中心&#xff0c;却发现报错了&#xff0c;错误码是404&#xff0c;下面和…

【 TypeScript 】对TypeScript中泛型的理解?应用场景?

1. 是什么 泛型程序设计(generic programming)是程序设计语言的一种风格或范式 泛型允许我们在强类型程序设计语言中编写代码时使用一些以后才指定的类型&#xff0c;在实例化时作为参数指明这些类型 在typescript中&#xff0c;定义函数&#xff0c;接口或者类的时候&#xff…

力扣--深度优先算法/回溯算法90.子集Ⅱ

思路分析&#xff1a; 成员变量&#xff1a; result: 用于存储最终的子集结果。path: 用于存储当前正在构建的子集。 DFS函数&#xff1a; dfs(vector<int>& nums, int start): 递归地生成子集。 从给定的start索引开始遍历数组。如果当前元素与前一个元素相同&#…

基于STM32的温湿度数据采集系统

目录 目录 I 摘要 I Abstract II 第一章 绪论 1 1.1温湿度传感器的背景及意义 1 1.2温湿度传感器国内发展现状 1 1.3温湿度传感器的发展趋势 2 第二章 温湿度原理及相关技术 3 2.1温湿度传感器 3 2.1.1温度传感器 3 2.1.2 湿度传感器 4 2.1.3 温湿度传感器物理参数及定义 5 2.…

计算机组成原理-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下计算机组成原理中的各章练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 参考资料是王道的计算机组成原理和西电的计算机组成原理。 计算机组成原理系列文章传送门&#xff1a; 第一/二章 概述和数…

信钰证券|股票多少岁可以开户?怎么开户?

网上处理股票开户要求投资者年龄为18-70周岁&#xff08;16-18周岁要求提交收入证明才能开户&#xff0c;70周岁及70周岁以上需求自己带身份证和银行卡去营业部现场处理开户&#xff09;。 开户流程&#xff1a; 1、选好券商&#xff0c;下载并注册相关券商APP&#xff1b; …

嵌入式工资为啥比纯软工资低那么多?

嵌入式工资为啥比纯软工资低那么多&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升自己&…

Focal Modulation Networks聚焦调制网络

摘要 我们提出了 焦点调制网络 &#xff08;简称 FocalNets) &#xff0c;其中 自注意&#xff08; SA &#xff09;被 Focal Modulation 替换&#xff0c;这种机制 包括三个组件&#xff1a;&#xff08; 1 &#xff09;通过 depth-wise Conv 提取分级的上下文信息&#xff0c…

3D视觉引导缸套自动化上下料

缸套作为制造业中关键零部件&#xff0c;其下料环节的效率和精度直接影响到整个生产流程的顺利进行。随着3D视觉技术的不断发展&#xff0c;越来越多的企业开始采用3D视觉引导技术实现缸套的自动化下料&#xff0c;从而提升生产效率、降低成本并提高产品质量。 案例背景&#x…

【计算机视觉】图像处理算法(形态学滤波篇)

来源&#xff1a;《OpenCV3编程入门》&#xff0c;怀念毛星云大佬&#x1f56f;️ 说明&#xff1a;本系列重点关注各种图像处理算法的原理、作用和对比 形态学滤波(1 ):腐蚀与膨胀 形态学槪述 数学形态学的概念&#xff1a; 数学形态学(Mathematical morphology)是立在格论…

【数据结构与算法】解题20240312

这里写目录标题 一、字符串转换整数 (atoi)二、1. 两数之和三、128. 最长连续序列四、73. 矩阵置零 一、字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。…

前端之用HTML做一个汇款单

例子 代码 里面注释是我我对运用到的知识的理解 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>工商银行电子汇款单</title> </head> <body><h3>工商银行电子汇款单</…

docker学习进阶篇

一、dockerfile解析 官方文档&#xff1a; Dockerfile reference | Docker Docs 1.1、dockfile是什么&#xff1f; dockerfile是用来构建docker镜像的文本文件&#xff0c;由一条条构建镜像所需的指令和参数构成的脚本。 之前我们介绍过通过具体容器反射构建镜像(docker comm…

柚见第十一期(前端页面开发)

创建队伍 便于控制样式,在外面套一层div 创建假数据模拟后端传来数据 //假数据模拟 const initFormData { "name": "", "description": "", "expireTime": "", "maxNum": 0, "passwor…

基础小白快速Python---------时间日期

在Python中&#xff0c;time 模块提供了基本的时间相关功能。以下是一些常用的函数和方法&#xff1a; 1. time.time(): 返回自纪元&#xff08;1970年1月1日&#xff09;以来的秒数。 import time# 获取当前时间戳 current_time time.time() print(current_time) # 输出例如…

C++ 之LeetCode刷题记录(三十九)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用…

Node.js与Webpack笔记(二)

上一篇&#xff1a;Node.js与Webpack笔记&#xff08;一&#xff09;-CSDN博客 目录 Webpack模块打包工具 1.Webpack简介以及体验 2.Webpack的作用 4.体验Webpack 如果运行package.json里的自定义命令&#xff1f; Webpack 默认入口和出口&#xff1f; 入门使用 5.Webp…

centos7.9安装nacos

centos7.9安装nacos2.3.1 在centos x86_64环境安装nacos2.31环境准备 jdk1.8 、 mysql、 nacos 在window11环境安装nacos2.31 在centos x86_64环境安装nacos2.31 环境准备 jdk1.8 、 mysql、 nacos Nacos 依赖 Java 环境来运行。我们通过下载编译后压缩包方式安装。 重点踩坑…

Java微服务 第二十一章 Java多线程安全与锁

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

​​力矩电机的建模、仿真与选择

1 力矩电机建模 图1中 e i ( t ) {e_i}\left( t \right) ei​(t)为电机输入电压&#xff0c; L a {L_a} La​为电枢电感&#xff0c; R a {R_a} Ra​为电枢电阻&#xff0c; e m ( t ) {e_m}\left( t \right) em​(t)为电机工作时产生的反电动势&#xff0c; i a ( t ) {i_a}\l…