首页 > 其他分享 >力扣---1161. 最大层内元素和

力扣---1161. 最大层内元素和

时间:2023-05-22 21:56:08浏览次数:42  
标签:层内 1161 deque int sum list --- null root

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

提示:

树中的节点数在 [1, 104]范围内
-105 <= Node.val <= 105

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-level-sum-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

深度优先和广度优先都可以做。

深度优先需要用一个 list 来存储每一层的累加和。

广度优先需要维护一个最大值以及最大值所处层数。

深度优先:

class Solution {
    public int maxLevelSum (TreeNode root) {
        // 存储每一层的累加和。
        List<Integer> list = new ArrayList<>();
        dfs(root, 0, list);
        int max = Integer.MIN_VALUE;
        int res = -1;
        // 寻找最大值所在的层数。
        for (int i = 0; i < list.size(); i ++) {
            int sum = list.get(i);
            if (sum > max) {
                max = sum;
                res = i;
            }
        }
        return res + 1;
    }

    private void dfs (TreeNode node, int deepth, List<Integer> list) {
        if (node == null) {
            return;
        }
        // 遇到了新的一层。
        if (deepth >= list.size()) {
            list.add(node.val);
        } else {
            list.set(deepth, list.get(deepth) + node.val);
        }
        dfs(node.left, deepth + 1, list);
        dfs(node.right, deepth + 1, list);
    }
}

 广度优先:

class Solution {
    public int maxLevelSum (TreeNode root) {
        int max = Integer.MIN_VALUE;
        int res = -1;
        Deque<TreeNode> deque = new ArrayDeque<>();
        deque.addLast(root);
        int count = 1;
        while (!deque.isEmpty()) {
            int len = deque.size();
            int sum = 0;
            for (int i = 0; i < len; i++) {
                TreeNode temNode = deque.removeFirst();
                sum += temNode.val;
                if (temNode.left != null) {
                    deque.addLast(temNode.left);
                }
                if (temNode.right != null) {
                    deque.addLast(temNode.right);
                }
            }
            if (sum > max) {
                max = sum;
                res = count;
            }
            count++;
        }
        return res;
    }
}

 

标签:层内,1161,deque,int,sum,list,---,null,root
From: https://www.cnblogs.com/allWu/p/17421837.html

相关文章

  • 微信小程序web-view与H5 通信方式探索
    小程序简介小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。需求微信小程序H5混合开发就是 在一个小程序中,采用部分小程序原生页面,部分通过Webview内嵌H5页面¹,二者配合实现完整业务逻辑的方案。image.png 为什么需......
  • RSA之低加密指数广播攻击------2023.5.22
    使用条件:模数n,密文C不同,明文m,加密指数e相同。(一般的话e=k,k是题目给出的n和c的组数)例如:e=k=3同余式组:C1≡m^emodn1C2≡m^emodn2C3≡m^emodn3由中国剩余定理:设n1,n2,n3是两两互素的正整数,M=n1∗n2∗n3Mi=M/ni (i=1,2,3)则同余式组: m^e≡Ci mod ni  (i=1,2,3)有唯一解......
  • Java设计模式-组合模式
    简介在软件设计中,设计模式是一种被广泛接受和应用的经验总结,旨在解决常见问题并提供可复用的解决方案。组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式能够使客户端以一致的方式处理单个对象和对象集合,将对象的组合与对象的使......
  • docker-compose
    1、介绍docker-compose是一个用来定义和运行复杂应用的docker工具。其使用一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的......
  • [ICDE 2023] Voting-based Opinion Maximization
    [ICDE2023]Voting-basedOpinionMaximizationApplication在总统大选时,会有许多候选者,这些候选者都希望能够被选上,他们可以通过寻找一组种子节点(即社交网络上的用户),靠他们的影响力(本文采用opinion,和influence不同),使得这个目标候选者在大选中可以获胜。除此之外。一般投票都会......
  • C语言函数大全-- x 开头的函数(2)
    C语言函数大全本篇介绍C语言函数大全--x开头的函数1.xdr_char1.1函数说明函数声明函数功能bool_txdr_char(XDR*xdrs,char*cp);用于将一个char类型的数据编码为XDR流或从XDR流中解码出一个char类型的数据参数:xdrs:指向要编码或解码数据的XD......
  • Java-Servlet解析
    前言从事Javaweb项目开发有一段时间了,一直不理解它是怎么一回事,后来查询资料发现这里面涉及到几个东西,分别是tomcat、JavaEE中13个规范之一的servlet、以及springMVC。于是就去学习了一下,发现这里里面都是围绕这servlet进行的操作。于是就有了今天的这个总结。Servlet定义Servl......
  • RSA之低指数攻击------2023.5.22
    1,e=3的小明文攻击:特点:当e=3时,如果明文过小,导致明文的三次方仍然小于n,那么通过直接对密文开三次方即可得到明文。 即:C=m^e mod n,如果e=3,且m^e<n,则C=m^e,m=c^(1/3) 2.如果明文的三次方比n大,但不是足够大,那么设k有: C=m^e+k∗n 爆破k,如果 C−k∗n 或者 C+k∗n......
  • mongodb--索引
    一、索引概述1、说明:索引是一种特殊的数据结构,即采用B-Tree数据结构。索引是以易于遍历读取的形式存储着集合中文档的一小部分----即:文档中的特定字段或一/多组字段,并且这些字段均按照字段的值进行排序。索引项的排序支持有效的等值匹配和基于范围的查询操作。此外,MongoDB还......
  • ios --- 调用系统"设置"里的功能
    //一键打开移动蜂窝网络设置:NSURL*url=[NSURLURLWithString:@"prefs:root=MOBILE_DATA_SETTINGS_ID"]; 蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_IDhttp://my.oschina.net/u/2344008/blog/465693安装后第一次运行软件时,系统会弹出提示用户是否允许软件获取当前位置,如果用户不允......