Explore neighbours level by level using a queue. Finds the shortest path in unweighted graphs.
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.
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
visited -> you re-enqueue and blow up runtime.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.