# 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: ''' { 1 : [1], 2 : [3, 2] 3 : [5, none, none, 9] 4 : [6, none, none, none, none, none, 7] } ''' queue = deque([(0, 1, root)]) min_max_array = [] while queue: level, index, node = queue.popleft() if not node: continue if (len(min_max_array) == level): min_max_array.append((float('inf'), float('-inf'))) min_max_array[level] = (min(min_max_array[level][0], index), max(min_max_array[level][1], index)) queue.append((level + 1, index * 2, node.left)) queue.append((level + 1, (index * 2) + 1, node.right)) max_width = 1 for min_val, max_val in min_max_array: max_width = max(max_val - min_val + 1, max_width) return max_width