题目描述
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
示例: <img :src='$withBase("/1161.jpeg')" alt="示例">
输入: [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
来源:LeetCode
思路
层次遍历二叉树,遍历的同时,把一层的每一个节点算上总和。保留一个最大值,和当时的层级。遍历结束,此层级即为结果。
解法
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
const maxLevelSum = root => {
let one = [];
let two = [root];
let max = root.val;
let result = 1;
let level = 0;
while (two.length) {
one = two;
two = [];
let sum = 0;
while (one.length) {
const { left, right, val } = one.pop();
sum += val;
if (left) two.push(left);
if (right) two.push(right);
}
level++;
if (sum > max) {
max = sum;
result = level;
}
}
return result;
};