def bfs(root):
    if not root:
        return []

    queue = deque([root])
    traversal = []

    while queue:
        node = queue.popleft()
        traversal.append(node.val)

        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)

    return traversal