Problem

Given the root of a binary tree, the level of its root is 1, the level of its children is 2, and so on.

Return the smallest level x such that the sum of all the values of nodes at level x is maximal.

Opposite of this problem - Minimum Level Sum of a Binary Tree Problem.

Examples

Example 1:

graph TD
	A(1) --- B(7) & C(0)
	B --- D(7) & E("-8")
	
  
Input:
root = [1,7,0,7,-8,null,null]
Output:
 2
Explanation: 
Level 1 sum = 1.
Level 2 sum = 7 + 0 = 7.
Level 3 sum = 7 + -8 = -1.
So we return the level with the maximum sum which is level 2.

Example 2:

Input:
root = [989,null,10250,98693,-89388,null,null,null,-32127]
Output:
 2

Solution

Method 1 - Level Order Traversal

Use BFS to find the sum of each level, then locate the level with largest sum.

Code

Java
    public int maxLevelSum(TreeNode root) {
        int max = Integer.MIN_VALUE, maxLevel = 1;
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        for (int level = 1; !q.isEmpty(); ++level) {
            int sum = 0;
            int sz = q.size();
            while (sz > 0) {
                TreeNode n = q.poll();
                sum += n.val;
                if (n.left != null) { 
                    q.offer(n.left);
                }
                if (n.right != null) {
                    q.offer(n.right);
                }	            
            }
            if (max < sum) {
                max = sum;
                maxLevel = level;
            }
        }
        return maxLevel;
    }

Complexity

  • Time: O(n)
  • Space: O(n) (at max n elements will be stored by the queue)