class Solution: def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: if not root: return [] q = deque([root]) level = 1 res = [] while q: if (level % 2): ## < this is nice res.append([x.val for x in q]) else: res.append([x.val for x in reversed(q)]) for _ in range(len(q)): node = q.popleft() if node.left: q.append(node.left) if node.right: q.append(node.right) level += 1 return res