# 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:
res = 0
q = deque([(root, 1, 0)]) # [node, num, level]
prevLevel, prevNum = 0, 1
while q:
node, num, level = q.popleft()
if level > prevLevel:
prevLevel = level
prevNum = num
res = max(res, num - prevNum + 1)
if node.left:
q.append((node.left, 2 * num, level + 1))
if node.right:
q.append((node.right, 2 * num + 1, level + 1))
return res# 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:
res = 0
q = deque([(root, 0)])
while q:
start = q[0][1]
for _ in range(len(q)):
node, num = q.popleft()
curNum = num - start
res = max(res, curNum + 1)
if node.left:
q.append((node.left, 2 * curNum))
if node.right:
q.append((node.right, 2 * curNum + 1))
return res# 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:
first = {}
res = 0
def dfs(node, level, num):
nonlocal res
if not node:
return
if level not in first:
first[level] = num
res = max(res, num - first[level] + 1)
dfs(node.left, level + 1, 2 * num)
dfs(node.right, level + 1, 2 * num + 1)
dfs(root, 0, 0)
return res