题目
给定一棵二叉树的根节点 root
,请找出该二叉树中每一层的最大值。
示例1:
输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
解释:
1
/ \
3 2
/ \ \
5 3 9
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
示例2:
输入: root = [1,2,3]
输出: [1,3]
解释:
1
/ \
2 3
1
2
3
4
5
6
2
3
4
5
6
示例3:
输入: root = [1]
输出: [1]
1
2
2
示例4:
输入: root = [1,null,2]
输出: [1,2]
解释:
1
\
2
1
2
3
4
5
6
2
3
4
5
6
示例5:
输入: root = []
输出: []
1
2
2
提示:
- 二叉树的节点个数的范围是
[0,10
4]
-2
31<= Node.val <= 2
31- 1
注意:本题与主站 515 题相同: https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/
题解
java
public List<Integer> largestValues(TreeNode root) {
List<Integer> result = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
// 若根节点非空 则入队
if (Objects.nonNull(root)) {
queue.offer(root);
}
int max, size;
TreeNode t;
while (!queue.isEmpty()) {
max = Integer.MIN_VALUE;
size = queue.size();
// 按照当前队列大小遍历
for (int i = 0; i < size; i++) {
t = queue.poll();
// 迭代最大值
max = Integer.max(t.val, max);
// 左右树非空则入队
if (Objects.nonNull(t.left)) {
queue.offer(t.left);
}
if (Objects.nonNull(t.right)) {
queue.offer(t.right);
}
}
result.add(max);
}
return result;
}
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
34
35
36
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
34
35
36