Maximum Level Sum of a Binary Tree
Advertisement
Problem
Return the smallest level number with the maximum sum of node values.
Key insight: Simple BFS. Sum each level, track maximum.
Solutions
// C++
int maxLevelSum(TreeNode* root) {
queue<TreeNode*> q;
q.push(root);
int maxSum = INT_MIN, bestLevel = 1, level = 0;
while (!q.empty()) {
level++;
int sz = q.size(), sum = 0;
while (sz--) {
auto node = q.front(); q.pop();
sum += node->val;
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
if (sum > maxSum) { maxSum = sum; bestLevel = level; }
}
return bestLevel;
}
// Java
public int maxLevelSum(TreeNode root) {
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
int maxSum = Integer.MIN_VALUE, bestLevel = 1, level = 0;
while (!q.isEmpty()) {
level++;
int sz = q.size(), sum = 0;
while (sz-- > 0) {
TreeNode node = q.poll();
sum += node.val;
if (node.left != null) q.add(node.left);
if (node.right != null) q.add(node.right);
}
if (sum > maxSum) { maxSum = sum; bestLevel = level; }
}
return bestLevel;
}
// JavaScript
function maxLevelSum(root) {
let queue = [root], maxSum = -Infinity, bestLevel = 1, level = 0;
while (queue.length) {
level++;
const next = [];
let sum = 0;
for (const node of queue) {
sum += node.val;
if (node.left) next.push(node.left);
if (node.right) next.push(node.right);
}
if (sum > maxSum) { maxSum = sum; bestLevel = level; }
queue = next;
}
return bestLevel;
}
# Python
from collections import deque
def maxLevelSum(root):
q = deque([root])
max_sum, best_level, level = float('-inf'), 1, 0
while q:
level += 1
level_sum = 0
for _ in range(len(q)):
node = q.popleft()
level_sum += node.val
if node.left: q.append(node.left)
if node.right: q.append(node.right)
if level_sum > max_sum:
max_sum, best_level = level_sum, level
return best_level
Complexity
- Time: O(n)
- Space: O(n)
Advertisement
← Previous
Smallest String Starting From LeafNext →
Binary Tree Pruning