政府网站建设与维护网盟推广平台
题目
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
一、代码实现
import "math"func maxLevelSum(root *TreeNode) int {if root == nil {return 0}queue := []*TreeNode{root}maxSum := math.MinInt64result := 0level := 1for len(queue) > 0 {size := len(queue)sum := 0for i := 0; i < size; i++ {node := queue[0]queue = queue[1:]sum += node.Valif node.Left != nil {queue = append(queue, node.Left)}if node.Right != nil {queue = append(queue, node.Right)}}if sum > maxSum {maxSum = sumresult = level}level++}return result
}
二、算法分析
1. 核心思路
- 层次遍历(BFS):利用队列实现广度优先搜索,逐层计算节点值之和
- 动态极值追踪:实时比较并更新最大层和及其对应最小层号
2. 关键步骤
- 队列初始化:根节点入队
- 层级统计:记录当前层节点数,遍历时累加节点值
- 极值更新:比较当前层和与历史最大值,更新最大值及对应层号
- 层级递进:处理完每层后递增层号计数器
3. 复杂度
指标 | 值 | 说明 |
---|---|---|
时间复杂度 | O(n) | 每个节点遍历一次 |
空间复杂度 | O(n) | 队列最大存储空间为最宽层节点数 |
三、图解示例
四、边界条件与扩展
1. 特殊场景验证
- 空树:返回0
- 单节点树:返回层号1
- 负数和层:正确识别负数层和的最大值
- 平局层和:返回最先出现的较小层号
2. 多语言实现
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightfrom collections import dequeclass Solution:def maxLevelSum(self, root: TreeNode) -> int:if not root:return 0max_sum = float('-inf')result_level = 0level = 1queue = deque([root])while queue:level_sum = 0level_size = len(queue)for _ in range(level_size):node = queue.popleft()level_sum += node.valif node.left:queue.append(node.left)if node.right:queue.append(node.right)if level_sum > max_sum:max_sum = level_sumresult_level = levellevel += 1return result_level
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}class Solution {public int maxLevelSum(TreeNode root) {if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);int maxSum = Integer.MIN_VALUE;int result = 0;int level = 1;while (!queue.isEmpty()) {int size = queue.size();int sum = 0;for (int i = 0; i < size; i++) {TreeNode node = queue.poll();sum += node.val;if (node.left != null) queue.offer(node.left);if (node.right != null) queue.offer(node.right);}if (sum > maxSum) {maxSum = sum;result = level;}level++;}return result;}
}
五、总结与扩展
1. 核心创新点
- 层级聚合策略:利用BFS天然分层特性实现高效统计
- 极值双维护机制:同步维护最大值和最小层号两个状态量
2. 扩展应用
- 三维层级分析:处理多个平行树结构的层级统计
- 动态权重求和:支持节点带权重的层级统计
- 分布式计算:对超宽层级进行分片并行计算
3. 工程优化
- 内存池技术:预分配节点存储空间减少GC压力
- 层级缓存:实现层级结果的持久化存储
- 增量更新:支持动态树的增量层级统计