Maximum Level Sum of a Binary Tree

Sanjeev SharmaSanjeev Sharma
2 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro