1161.最大层内元素和
【LetMeFly】1161.最大层内元素和
力扣题目链接:https://leetcode.cn/problems/maximum-level-sum-of-a-binary-tree/
给你一个二叉树的根节点 root
。设根节点位于二叉树的第 1
层,而根节点的子节点位于第 2
层,依此类推。
请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
示例 1:
输入:root = [1,7,0,7,-8,null,null] 输出:2 解释: 第 1 层各元素之和为 1, 第 2 层各元素之和为 7 + 0 = 7, 第 3 层各元素之和为 7 + -8 = -1, 所以我们返回第 2 层的层号,它的层内元素之和最大。
示例 2:
输入:root = [989,null,10250,98693,-89388,null,null,null,-32127] 输出:2
提示:
- 树中的节点数在
[1, 104]
范围内 -105 <= Node.val <= 105
方法一:层序遍历 + 广搜BFS
有关二叉树的层序遍历,之前已经讲过,详细方法可参考 LeetCode 0107.二叉树的层序遍历II の 题解
本题,同样地,我们使用优先队列来对二叉树进行层序遍历。
- 用变量
maxSum
记录当前的单层最大和 - 用变量
ans
来记录取得maxSum
的最小层号 - 用变量
nowLayer
记录当前遍历到的层的层号
初始值maxSum
为int
范围内的最小值INT_MIN
,ans
取任意值即可,nowLayer
的值取1
。
在遍历到某一层时,用一个临时变量thisSum
统计这一层的节点值之和
如果这一层遍历结束后,thisSum
的值大于之前所记录的最大值maxSum
那么就更新maxSum
为thisSum
,并将ans
赋值为当前层号nowLayer
。
- 时间复杂度$O(N)$,其中$N$是节点个数。
- 空间复杂度$O(N2)$,其中$N2$是节点最多的一层的节点数。
AC代码
C++
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126082726
1161.最大层内元素和
https://blog.letmefly.xyz/2022/07/31/LeetCode 1161.最大层内元素和/