662. Maximum Width of Binary Tree

Difficulty:
Related Topics:
Similar Questions:

    Problem

    Given the root of a binary tree, return **the *maximum width* of the given tree**.

    The maximum width of a tree is the maximum width among all levels.

    The width of one level is defined as the length between the end-nodes (the leftmost and rightmost non-null nodes), where the null nodes between the end-nodes that would be present in a complete binary tree extending down to that level are also counted into the length calculation.

    It is guaranteed that the answer will in the range of a 32-bit signed integer.

      Example 1:

    Input: root = [1,3,2,5,3,null,9]
    Output: 4
    Explanation: The maximum width exists in the third level with length 4 (5,3,null,9).
    

    Example 2:

    Input: root = [1,3,2,5,null,null,9,6,null,7]
    Output: 7
    Explanation: The maximum width exists in the fourth level with length 7 (6,null,null,null,null,null,7).
    

    Example 3:

    Input: root = [1,3,2,5]
    Output: 2
    Explanation: The maximum width exists in the second level with length 2 (3,2).
    

      Constraints:

    Solution (Java)

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        static class Pair {
            TreeNode node;
            int idx;
    
            public Pair(TreeNode node, int idx) {
                this.node = node;
                this.idx = idx;
            }
        }
    
        public int widthOfBinaryTree(TreeNode root) {
            Queue<Pair> q = new LinkedList<>();
            q.add(new Pair(root, 0));
            int res = 1;
            while (!q.isEmpty()) {
                int qSize = q.size();
                int lastIdx = 0;
                int firstIdx = 0;
                for (int i = 0; i < qSize; i++) {
                    Pair temp = q.poll();
                    if (i == 0) {
                        firstIdx = temp.idx;
                    }
                    if (i == qSize - 1) {
                        lastIdx = Objects.requireNonNull(temp).idx;
                    }
                    if (Objects.requireNonNull(temp).node.left != null) {
                        q.add(new Pair(temp.node.left, 2 * (temp.idx) + 1));
                    }
                    if (temp.node.right != null) {
                        q.add(new Pair(temp.node.right, 2 * (temp.idx) + 2));
                    }
                }
                res = Math.max((lastIdx - firstIdx) + 1, res);
            }
            return res;
        }
    }
    

    Explain:

    nope.

    Complexity: