Coding

662. Maximum Width of Binary Tree

2023-04-20 2 min read

⭐⭐

題目敘述

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).

解題思路

Solution

import javafx.util.Pair;
import java.util.ArrayDeque;
import java.util.Deque;

// 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 {
    public int widthOfBinaryTree(TreeNode root) {
        if(root == null) return 0;

        int ans = 0;
        Deque<Pair<TreeNode, Integer>> deque = new ArrayDeque<>();
        deque.add(new Pair<>(root, 0));

        while(!deque.isEmpty()){
            int len = deque.size();
            int start = deque.peekFirst().getValue();
            int end = deque.peekLast().getValue();
            ans = Math.max(ans, end - start + 1);

            for(int i = 0; i < len; i++){
                Pair<TreeNode, Integer> node = deque.pop();
                TreeNode curr = node.getKey();
                int index = node.getValue();

                if(curr.left != null) 
                    deque.add(new Pair<>(curr.left, 2 * index));
                if(curr.right != null)
                    deque.add(new Pair<>(curr.right, 2 * index + 1));
            }
        }

        return ans;
    }
}
← Posts
meow~