CP
Patterns

Breadth First Search

def bfs(root: TreeNode) -> List[int]:
    q = deque([root])
    result = []

    while q:
        count = len(q)
        level = []

        for _ in range(count):
            node = q.popleft()
            level.append(node.val)
            if node.left:
                q.append(node.left)
            if node.right:
                q.append(node.right)

        result.append(level)

    return result