DFS traversal and applications in Data Structures Theory - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we use Depth-First Search (DFS) to explore a graph or tree, we want to know how the time it takes grows as the structure gets bigger.
We ask: How many steps does DFS need to visit all nodes and edges?
Analyze the time complexity of the following DFS code snippet.
function DFS(node, visited) {
visited.add(node);
for (const neighbor of node.neighbors) {
if (!visited.has(neighbor)) {
DFS(neighbor, visited);
}
}
}
// Start DFS from a given node
const visited = new Set();
DFS(startNode, visited);
This code visits each node and explores all its neighbors recursively to traverse the entire graph or tree.
Look at what repeats during DFS:
- Primary operation: Visiting each node and checking its neighbors.
- How many times: Each node is visited once, and each edge is checked once or twice depending on graph type.
As the graph grows, DFS visits every node and edge once.
| Input Size (n nodes, m edges) | Approx. Operations |
|---|---|
| 10 nodes, 15 edges | About 25 steps (10 nodes + 15 edges) |
| 100 nodes, 200 edges | About 300 steps |
| 1000 nodes, 3000 edges | About 4000 steps |
Pattern observation: The steps grow roughly in proportion to the number of nodes plus edges.
Time Complexity: O(n + m)
This means DFS takes time proportional to all nodes plus all edges in the graph.
[X] Wrong: "DFS only depends on the number of nodes, so it is O(n)."
[OK] Correct: DFS also checks edges to find neighbors, so edges affect the time too, especially in dense graphs.
Understanding DFS time complexity helps you explain how your code scales when exploring networks or trees, a common skill interviewers look for.
"What if the graph is represented as an adjacency matrix instead of adjacency lists? How would the time complexity change?"
Practice
Solution
Step 1: Understand DFS traversal approach
DFS explores nodes by going deep into one branch before checking others.Step 2: Compare with other traversal methods
BFS visits neighbors first, but DFS goes deep first, then backtracks.Final Answer:
Explore as far as possible along each branch before backtracking -> Option BQuick Check:
DFS = deep exploration first [OK]
- Confusing DFS with BFS
- Thinking DFS visits all neighbors first
- Assuming DFS visits nodes by distance
Solution
Step 1: Understand visited marking in DFS
Nodes are marked visited by setting their status to True to avoid revisiting.Step 2: Analyze options
Setting visited[node] = True correctly marks the node; others are incorrect or incomplete.Final Answer:
visited[node] = True -> Option AQuick Check:
Mark visited nodes as True [OK]
- Marking visited as False instead of True
- Using append instead of assignment
- Assigning visited to node directly
1->2, 1->3, 2->4, 3->4. Starting DFS from node 1, which is the order of nodes visited?Solution
Step 1: Start DFS at node 1 and explore neighbors
From 1, DFS visits 2 first (assuming adjacency order), then explores 2's neighbor 4.Step 2: Backtrack and visit remaining neighbors
After finishing 2 and 4, DFS backtracks to 1 and visits 3, then 3's neighbor 4 is already visited.Final Answer:
[1, 2, 4, 3] -> Option DQuick Check:
DFS order = deep first, backtrack [OK]
- Visiting neighbors in wrong order
- Visiting node 4 twice
- Confusing BFS order with DFS
Solution
Step 1: Identify cause of infinite loop in DFS
If nodes are not marked visited, DFS revisits the same nodes repeatedly causing infinite loops.Step 2: Analyze other options
Using a queue changes traversal type but doesn't cause infinite loops; disconnected nodes or no edges don't cause loops.Final Answer:
Not marking nodes as visited -> Option CQuick Check:
Missing visited marks cause loops [OK]
- Blaming data structure choice for loops
- Ignoring visited marking importance
- Assuming disconnected nodes cause loops
Solution
Step 1: Understand cycle detection in directed graphs
DFS with a recursion stack tracks nodes in the current path to detect back edges indicating cycles.Step 2: Evaluate other options
Marking visited alone misses cycles; BFS is not ideal for cycle detection; counting edges vs nodes is insufficient.Final Answer:
Use DFS with a recursion stack to track nodes currently in the path -> Option AQuick Check:
Recursion stack in DFS detects cycles [OK]
- Ignoring recursion stack in cycle detection
- Using BFS for cycle detection in directed graphs
- Relying on edge/node count alone
