题目名称

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

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

示例

输入:root = [1,7,0,7,-8,null,null]

输出:2

解释:

第 1 层各元素之和为 1,

第 2 层各元素之和为 7 + 0 = 7,

第 3 层各元素之和为 7 + -8 = -1,

所以我们返回第 2 层的层号,它的层内元素之和最大。

题解

这道题主要考察树的广度优先遍历,将数一层一级的分割开来,然后分别计算每层的和,比较大小

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var maxLevelSum = function(root) {
let rootArr = changeTreeToArray([[root]])
let max = -Infinity, floor = 1
for(let i = 0; i < rootArr.length; i++) {
let sum = getSum(rootArr[i])
if(max < sum) {
max = sum;
floor = i + 1
}
}
return floor
};

function getSum(arr) {
let total = 0
arr.forEach(item => {
total += item.val
});
return total
}

function changeTreeToArray(arr, index = 0) {
let newArr = [], root = arr[index]
for(let i = 0; i < root.length; i++) {
let r = root[i]
r.left && newArr.push(r.left);
r.right && newArr.push(r.right)
}
if(newArr.length === 0) return arr
arr.push(newArr);
index++
return changeTreeToArray(arr, index)
}