题目形容
这是 LeetCode 上的 1161. 最大层内元素和 ,难度为 中等。
Tag :「层序遍历」、「BFS」
给你一个二叉树的根节点 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, 10^4]$ 范畴内
- $-10^5 <= Node.val <= 10^5$
层序遍历
依据题意,应用 BFS
进行层序遍历即可。
每次以「层」为单位进行拓展,统计该层的元素和,保护处理过程中的最大值层数和,以及层深度。
Java 代码:
class Solution {public int maxLevelSum(TreeNode root) {Deque<TreeNode> d = new ArrayDeque<>();
int max = -0x3f3f3f3f, depth = 1, ans = 0;
d.addLast(root);
while (!d.isEmpty()) {int sz = d.size(), cur = 0;
while (sz-- > 0) {TreeNode t = d.pollFirst();
if (t.left != null) d.addLast(t.left);
if (t.right != null) d.addLast(t.right);
cur += t.val;
}
if (cur > max) {max = cur; ans = depth;}
depth++;
}
return ans;
}
}
TypeScript 代码:
function maxLevelSum(root: TreeNode | null): number {const d: TreeNode[] = new Array<TreeNode>()
let he = 0, ta = 0
d[ta++] = root
let max = -0x3f3f3f3f, depth = 1, ans = 0
while (he < ta) {
let sz = ta - he, cur = 0
while (sz-- > 0) {const t = d[he++]
if (t.left != null) d[ta++] = t.left
if (t.right != null) d[ta++] = t.right
cur += t.val
}
if (cur > max) {max = cur; ans = depth}
depth++
}
return ans
};
- 工夫复杂度:$O(n)$
- 空间复杂度:$O(n)$
最初
这是咱们「刷穿 LeetCode」系列文章的第 No.1161
篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,局部是有锁题,咱们将先把所有不带锁的题目刷完。
在这个系列文章外面,除了解说解题思路以外,还会尽可能给出最为简洁的代码。如果波及通解还会相应的代码模板。
为了不便各位同学可能电脑上进行调试和提交代码,我建设了相干的仓库:https://github.com/SharingSou…。
在仓库地址里,你能够看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其余优选题解。
更多更全更热门的「口试 / 面试」相干材料可拜访排版精美的 合集新基地 🎉🎉
本文由 mdnice 多平台公布