欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

力扣:1161. 最大层内元素和 题解(Java)

程序员文章站 2024-01-05 10:32:46
...

题目地址:最大层内元素和

 

题目描述:

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

 

力扣:1161. 最大层内元素和 题解(Java)

                                                                                     (图片来自力扣原题)

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

 

示例:

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

提示:

树中的节点数介于 1 和 10^4 之间
-10^5 <= node.val <= 10^5

解题思路:

1.树可以广度优先也可以深度优先,题目要求找出层内元素之和最大的那层,而深度优先更加方便,因此采用深度优先的遍历方法

2.建立存储每层元素和的数组。

3.遍历完树后,比较数组,找出层内元素之和最大的那层。

4.遍历:通过递归实现。down函数在存储当前节点数据时,继续往下,先找它的左子节点,然后存储左子节点的值,再找左子节点的左子节点,直到找到树的叶子节点,然后返回上一节点,找它的右子节点,找右子节点的左子节点,到叶节点,返回上一节点……

代码:

class Solution {
    int[] tem = new int[10001];
    public int maxLevelSum(TreeNode root) {
        down(root,1);
        int max = 1;
        for(int i = 2; i < 10001; i++){
            if(tem[max] < tem[i]) max = i;
        }
        return max;
    }
    public void down(TreeNode root, int ceng){
        tem[ceng] += root.val;
        if(root.left != null) down(root.left, ceng + 1);
        if(root.right != null) down(root.right,ceng + 1);
    }
}

 

相关标签: 力扣题解

上一篇:

下一篇: