Given the root of a binary tree, the level of its root is 1, the level of its children is 2, and so on.
Approach 1: BFS
- Add the elements to the queue
 - At any given level, calculate the sum of that level and mark the current level
 
Algorithm:
- Add the node values to the queue starting with the root.
 - At a level, calculate the level sum of every level and keep a variable to track the maximum level.
 - Repeat it until the queue is empty.
 - Return the maximum level.
 
Code:
class Solution {
    public int maxLevelSum(TreeNode root) {
        int maxLevel = 1;
        int maxSum = Integer.MIN_VALUE;
        int level = 1;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            int sum = 0;
            for(int i=0; i<size; i++){
                TreeNode node = queue.remove();
                sum = sum + node.val;
                if(node.left!=null)
                queue.add(node.left);
                if(node.right!=null)
                queue.add(node.right);
            }
            if(sum>maxSum){
                maxSum = sum;
                maxLevel = level;
            }
            level++;
        }
        return maxLevel;
    }
}
Time Complexity: O(n)
Where n is the number of nodes in the binary tree.
Space Complexity: O(w)
Where w is the maximum width of the binary tree — the maximum number of nodes at any level.
Approach 2 : DFS
- We make use of the arraylist to store the sum of the level at each node which is represented using the index.
 - Then we access it by running the loop.
 
Algorithm:
- We are storing the sum of each level in the arraylist.
 - If the 
list.size()==level, we add the node value. Else, we get the list value which is the of that level and add the current node value. - We do it for all the left and right subtrees.
 - Now, traverse through the list and get the maximum level sum.
 
Code:
class Solution {
    List<Integer> list;
    public int maxLevelSum(TreeNode root) {
        list = new ArrayList<>();
        getLevelSum(root, 0);
        int maxLevel = 0;
        int maxSum = Integer.MIN_VALUE;
        for(int i=0; i<list.size(); i++){
            if(list.get(i)>maxSum){
                maxLevel = i+1;
                maxSum = list.get(i);
            }
        }
        return maxLevel;
    }
    void getLevelSum(TreeNode root, int level){
        if(root==null)
        return;
        if(list.size()==level){
            list.add(root.val);
        }
        else{
            list.set(level, list.get(level)+root.val);
        }
        getLevelSum(root.left, level+1);
        getLevelSum(root.right, level+1);
    }
}
Time Complexity: O(n)
Where n is the number of nodes in the tree.
Space Complexity: O(h) for recursion + O(d) for list storage
Where h is the height of the tree and d is the depth (number of levels) of the tree.
Thanks for reading :)
Feel free to comment and like the post if you found it helpful
Follow for more
If you enjoy my content, support me by following me on my other socials:
https://linktr.ee/tanujav7
    
Top comments (0)