# LC 662. Maximum Width of Binary Tree ### [Problem link](https://leetcode.com/problems/maximum-width-of-binary-tree/) ###### tags: `leedcode` `python` `medium` `BFS` Given the <code>root</code> 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:** <img alt="" src="https://assets.leetcode.com/uploads/2021/05/03/width1-tree.jpg" style="width: 359px; height: 302px;" /> ``` 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:** <img alt="" src="https://assets.leetcode.com/uploads/2022/03/14/maximum-width-of-binary-tree-v3.jpg" style="width: 442px; height: 422px;" /> ``` 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:** <img alt="" src="https://assets.leetcode.com/uploads/2021/05/03/width3-tree.jpg" style="width: 289px; height: 299px;" /> ``` Input: root = [1,3,2,5] Output: 2 Explanation: The maximum width exists in the second level with length 2 (3,2). ``` **Constraints:** - The number of nodes in the tree is in the range <code>[1, 3000]</code>. - <code>-100 <= Node.val <= 100</code> ## Solution 1 - BFS ```python= # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def widthOfBinaryTree(self, root: Optional[TreeNode]) -> int: q = deque([(root, 1)]) res = 1 while q: size_q = len(q) level_max_width = q[-1][1] - q[0][1] + 1 res = max(res, level_max_width) for i in range(size_q): node, number = q.popleft() if node.left: q.append((node.left, number * 2)) if node.right: q.append((node.right, number * 2 + 1)) return res ``` >### Complexity >n = The number of nodes in the tree. >w = Max width of the tree. >| | Time Complexity | Space Complexity | >| ----------- | --------------- | ---------------- | >| Solution 1 | O(n) | O(w) | ## Note 標準的BFS題目, 用iteration就輕鬆解決.