Skip to Content

Explore neighbours level by level using a queue. Finds the shortest path in unweighted graphs.

Data Flow

start = A
queue = [A];   visited = {A}

dequeue A -> enqueue B, C   queue = [B, C]
dequeue B -> enqueue D      queue = [C, D]
dequeue C -> enqueue E      queue = [D, E]
dequeue D,E -> nothing new

level 0: A
level 1: B C
level 2: D E

BFS always visits all nodes at distance k before any at distance k+1.

When to use

Code (binary tree level order)

from collections import deque
 
def level_order(root):
    out, q = [], deque([root])
    while q:
        level = []
        for _ in range(len(q)):
            node = q.popleft()
            if not node: continue
            level.append(node.val)
            q.extend([node.left, node.right])
        if level: out.append(level)
    return out

Pitfalls

Analogy

A fire spreading through a building: each minute, every burning room lights all its neighbours. The minute count tells you the shortest escape distance.

Interview tip: If the problem asks for minimum X / k steps / nearest, default to BFS.

Advertisement