Skip to content
intermediate

Breadth-first by levels

Complete the level-order traversal — the queue that walks a binary tree one row at a time.

interface TreeNode {
  value: number
  left?: TreeNode
  right?: TreeNode
}

/**
 * Returns the tree's values grouped by depth — index 0 is the root's row.
 */
export function levelOrder(root: TreeNode | undefined): number[][] {
  if (root === undefined) return []

  const levels: number[][] = []
  const _____: TreeNode[] = [root]

  while (queue.length > 0) {
    const row: number[] = []
    // Everything queued before this round started is the current row.
    const rowSize = queue.______

    for (let i = 0; i < rowSize; i++) {
      const node = queue._____()
      if (node === undefined) break
      row.push(node.value)
      if (node.left !== undefined) queue.push(node.left)
      if (node.right !== undefined) queue.push(node.right)
    }

    levels.push(row)
  }

  return levels
}
0/3 filled tab moves · Ctrl+↵ submits · Ctrl+Shift+↵ runsstarter code