力扣:1161. 最大层内元素和 题解(Java)
程序员文章站
2024-01-05 10:32:46
...
题目地址:最大层内元素和
题目描述:
给你一个二叉树的根节点 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);
}
}