Graph Traversal (BFS & DFS)

Trees & Graphs

Shortest paths, flood fills, and connected components in arbitrary networks

175 problems·4 Easy·86 Medium·85 Hard
Pattern Study Guide & Cheat Sheet
▼

Explore vertices and edges in arbitrary networks using BFS (for unweighted shortest paths) or DFS (for connectivity, cycle detection, and component exploration).

Core Invariant: Visited Set Invariant: A node must be marked visited AT THE MOMENT IT IS ENQUEUED (for BFS) or entered (for DFS). Marking on pop causes the same node to be enqueued multiple times exponentially.

Recognize it (Keywords & Signals)
  • Shortest path / minimum transformations in unweighted graph
  • Clone graph / serialize network
  • Connected components / bipartite graph check
  • Word ladder (transform word A to B)
  • Detect cycle in directed or undirected graph
When NOT to use

Weighted graph with varying edge costs (use Dijkstra for non-negative weights, Bellman-Ford for negative weights).

How to solve (Step-by-step)
  1. 1.Construct adjacency list: `graph = collections.defaultdict(list)`.
  2. 2.Choose traversal: BFS (`deque`) for shortest path; DFS (recursion) for exploration/cycles.
  3. 3.Initialize `visited = set([start_node])` and `queue = deque([(start_node, 0)])`.
  4. 4.While queue is not empty: pop `curr, dist`.
  5. 5.If `curr == target`, return `dist`.
  6. 6.For each `neighbor in graph[curr]`: if `neighbor not in visited`, mark `visited.add(neighbor)` and `queue.append((neighbor, dist + 1))`.
Watch for (Interview Traps)
  • Marking visited on pop instead of enqueue: causes catastrophic duplicate queue insertions and TLE
  • Directed vs undirected: adding bidirectional edges when edges are strictly directed
  • Not handling disconnected graph components (need a wrapper loop over all nodes `0..V-1`)
BFS Shortest Path (Unweighted Graph)
from collections import deque, defaultdict

def bfs_shortest_path(edges: list[list[int]], start: int, target: int) -> int:
    # 1. Build adjacency list
    graph = defaultdict(list)
    for u, v in edges:
        graph[u].append(v)
        graph[v].append(u)
        
    # 2. Queue stores (current_node, distance)
    queue = deque([(start, 0)])
    visited = {start}  # ALWAYS mark visited at enqueue time
    
    while queue:
        curr, dist = queue.popleft()
        if curr == target:
            return dist
            
        for neighbor in graph[curr]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append((neighbor, dist + 1))
                
    return -1  # Target unreachable
Cost
O(V + E) visits every vertex and edge once · O(V) for queue and visited set (Linear in graph size for adjacency list representation.)
Canonical problems
#127 Word Ladder: BFS finds shortest sequence of 1-letter word mutations
#133 Clone Graph: DFS/BFS with hash map mapping original node to cloned copy
#785 Is Graph Bipartite?: 2-color BFS/DFS to verify no adjacent nodes share same color
#200 Number of Islands: Graph traversal over grid adjacency
Medium·93 companies·Max freq 100%·Acc 64.7%
RedfinAMDAnduril+90
Medium·55 companies·Max freq 100%·Acc 59.0%
C3.aiInformaticaLyft+52
Medium·52 companies·Max freq 100%·Acc 0.5%
State FarmNordstromZenefits+49
Hard·46 companies·Max freq 100%·Acc 0.5%
CleverTapFanaticsNavan+43
Medium·40 companies·Max freq 100%·Acc 55.9%
SnowflakeZenefitsinstabase+37
Hard·26 companies·Max freq 100%·Acc 37.3%
Pocket GemsUberX+23
Hard·26 companies·Max freq 100%·Acc 0.5%
PinterestHopperNetflix+23
Medium·25 companies·Max freq 100%·Acc 64.4%
Tower Research CapitalTower Research CapitalUrban Company+22
Medium·23 companies·Max freq 100%·Acc 0.4%
HTCMakeMyTripStripe+20
Medium·22 companies·Max freq 100%·Acc 74.1%
GrubhubSchlumbergerRoku+19
Medium·21 companies·Max freq 100%·Acc 65.7%
Pocket GemsFlexportWix+18
Hard·21 companies·Max freq 93%·Acc 56.8%
DoorDashWeRideDuolingo+18
Medium·17 companies·Max freq 100%·Acc 61.4%
ZIPeBayCoupang+14
Hard·16 companies·Max freq 100%·Acc 27.8%
YelpOktaLyft+13
Medium·15 companies·Max freq 100%·Acc 61.2%
Urban CompanyServiceNowNeetCode 150+12
Medium·15 companies·Max freq 87%·Acc 45.8%
PornhubMolocoNeetCode 150+12
Hard·14 companies·Max freq 100%·Acc 0.4%
DropboxNCRBNY Mellon+11
Hard·13 companies·Max freq 100%·Acc 39.5%
CiscoGravitonLucid+10
Medium·13 companies·Max freq 100%·Acc 71.3%
DirectiNeetCode 150NeetCode 150+10
Medium·13 companies·Max freq 100%·Acc 64.1%
DoorDashNeetCode 150NeetCode 150+10
Medium·13 companies·Max freq 77%·Acc 52.8%
SamsungMeeshoTikTok+10
Medium·12 companies·Max freq 100%·Acc 0.6%
Akuna CapitalNetflixNeetCode 150+9
Medium·12 companies·Max freq 100%·Acc 49.0%
HubspotToastLinkedIn+9
Medium·12 companies·Max freq 100%·Acc 50.1%
ZenefitsNeetCode 150Blind 75+9
Medium·11 companies·Max freq 100%·Acc 0.7%
Akuna CapitalPhonePeIBM+8
Medium·11 companies·Max freq 100%·Acc 65.1%
General MotorsXX+8
Medium·11 companies·Max freq 92%·Acc 57.0%
VerilyStackAdaptZeta Global+8
Medium·11 companies·Max freq 88%·Acc 59.6%
LimeSamsungAmazon+8
Hard·11 companies·Max freq 80%·Acc 60.0%
UberMathWorksMeesho+8
Medium·11 companies·Max freq 77%·Acc 67.9%
BoxNeetCode 150NeetCode 150+8
Hard·10 companies·Max freq 100%·Acc 0.7%
SnowflakeAckoTwo Sigma+7
Hard·10 companies·Max freq 93%·Acc 40.7%
UberMolocoAurora+7
Hard·9 companies·Max freq 100%·Acc 39.6%
RampAirbnbRippling+6
Medium·9 companies·Max freq 100%·Acc 70.7%
Two SigmaBloombergAmazon+6
Medium·8 companies·Max freq 89%·Acc 61.8%
AsanaPalantirOracle+5
Medium·8 companies·Max freq 88%·Acc 50.3%
ChimePhonePeLyft+5
Hard·8 companies·Max freq 66%·Acc 0.6%
Squarepoint CapitalConfluentCitadel+5
Medium·8 companies·Max freq 65%·Acc 63.8%
PhonePePayPalFlipkart+5
Medium·7 companies·Max freq 100%·Acc 42.6%
SplunkStacklineGoogle+4
Easy·7 companies·Max freq 100%·Acc 50.9%
Arista NetworksTuringAmazon+4
Hard·7 companies·Max freq 88%·Acc 50.9%
JuspayAndurilPhonePe+4
Hard·7 companies·Max freq 85%·Acc 65.7%
PhonePeGoogleUber+4
Medium·7 companies·Max freq 81%·Acc 62.3%
NetflixSnowflakeUber+4
Medium·7 companies·Max freq 75%·Acc 56.1%
CiscoSalesforceZeta Global+4
Hard·7 companies·Max freq 65%·Acc 41.9%
PhonePeDatabricksAirbnb+4
Hard·7 companies·Max freq 60%·Acc 61.8%
NutanixMorgan StanleyBarclays+4
Medium·7 companies·Max freq 50%·Acc 71.2%
CitadelAmazonGoogle+4
Medium·7 companies·Max freq 39%·Acc 61.3%
TikTokSalesforceGoldman Sachs+4
Hard·6 companies·Max freq 100%·Acc 0.6%
SAPNutanixApple+3
Hard·6 companies·Max freq 100%·Acc 54.0%
Hudson River TradingHudson River TradingTarget+3
50 displayed (of 50 matching)Filtered: All Companies

Top Companies Testing Graph Traversal (BFS & DFS)

Browse company-specific interview problem lists and recency breakdowns:

Explore All 22 DSA Coding Patterns

Master core algorithmic patterns tested in FAANG & Big Tech coding interviews.

Patterns Hub

Graph Traversal (BFS & DFS) frequently asked questions

What is the Graph Traversal (BFS & DFS) pattern in coding interviews?

Shortest paths, flood fills, and connected components in arbitrary networks It is categorized under Trees & Graphs and features 175 curated interview problems across Easy (4), Medium (86), and Hard (85) difficulties.

Which tech companies frequently test Graph Traversal (BFS & DFS)?

Companies frequently asking Graph Traversal (BFS & DFS) questions include Google, Amazon, Microsoft, Meta, Bloomberg, Uber.

How do I master the Graph Traversal (BFS & DFS) pattern?

Start by studying the algorithmic strategy and template code, then practice Easy and Medium problems before attempting Hard problems under timed conditions.