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

该博客主要介绍了如何解决力扣上的题目1161——最大层内元素和。通过深度优先遍历二叉树,存储每层元素和,找到最大和的层数。示例中给出了一个输入二叉树,解释了层内元素和的最大值出现在第2层。解题思路包括利用递归遍历树的节点,最后返回层内元素和最大的层号。

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

 

题目描述:

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

 

                                                                                     (图片来自力扣原题)

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

 

示例:

输入:[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);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值