字符串处理分数相减

1161. 最大层内元素和

难度中等84收藏分享切换为英文接收动态反馈

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

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

示例 1:

img

1
2
3
4
5
6
7
输入:root = [1,7,0,7,-8,null,null]
输出:2
解释:
1 层各元素之和为 1,
2 层各元素之和为 7 + 0 = 7,
3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。

示例 2:

1
2
输入:root = [989,null,10250,98693,-89388,null,null,null,-32127]
输出:2

提示:

  • 树中的节点数在 [1, 104]范围内
  • -105 <= Node.val <= 105

题解

二叉树的层序遍历的变形,注意遍历一层的时候可以首先获取队列的长度,然后递减指针,这样就可以遍历所有上一层的结点

遍历每一层的时候,累加该层的结点的值,保留最大的和以及对应的层数

最后返回最大的层数集合

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
37
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
public class Solution {
public int maxLevelSum(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int max_sum = Integer.MIN_VALUE, max_level = 0, current_level = 0;
while(!queue.isEmpty()) {
int temp_sum = 0;
for (int i = queue.size(); i > 0; i--) {
TreeNode temp = queue.poll();
temp_sum += temp.val;
if (temp.left != null) queue.add(temp.left);
if (temp.right != null) queue.add(temp.right);
}
current_level++;
if (temp_sum > max_sum) {
max_sum = temp_sum;
max_level = current_level;
}
}
return max_level;
}
}
  • 时间复杂度:$O(n)$ 二叉树结点数
  • 空间复杂度:$O(n)$ 二叉树结点数

image-20220731173509827


1161.最大层内元素和
http://example.com/2022/07/31/leetcode每日一题/1161.最大层内元素和/
作者
madao33
发布于
July 31, 2022
许可协议