Dataford
Interview Guides
Upgrade
All questions/Coding/Graph Traversal with BFS and DFS

Graph Traversal with BFS and DFS

Easy
Coding
Asked at 9 companies9GraphsStackQueue
Also asked at
22nd Century TechnologiesEPAM SystemsEmersonEOGAA

Problem

Problem

At Notion, graph traversal is used to explore dependency graphs and connected components. Given a graph as an adjacency list and a starting node, implement both Breadth-First Search (BFS) and Depth-First Search (DFS) and return the order in which nodes are visited.

Formal Specification

Write a function graph_traversals(graph, start) where:

  • graph is a dictionary mapping each node to a list of its neighbors
  • start is the node where traversal begins
  • Return a dictionary with two keys:
    • "bfs": list of nodes visited in BFS order
    • "dfs": list of nodes visited in DFS preorder

If start is not in the graph, return { "bfs": [], "dfs": [] }.

Traverse neighbors in the order they appear in the adjacency list.

Examples

Example 1 Input: graph = {"A": ["B", "C"], "B": ["D"], "C": ["E"], "D": [], "E": []}, start = "A" Output: {"bfs": ["A", "B", "C", "D", "E"], "dfs": ["A", "B", "D", "C", "E"]} Explanation: BFS explores level by level, while DFS goes as deep as possible before backtracking.

Example 2 Input: graph = {1: [2, 3], 2: [4], 3: [], 4: []}, start = 2 Output: {"bfs": [2, 4], "dfs": [2, 4]} Explanation: Starting from node 2, only nodes reachable from 2 are visited.

Constraints

  • 0 <= len(graph) <= 10^4
  • Total number of edges is at most 2 * 10^4
  • Graph may contain cycles
  • Node values are hashable

Examples

Example 1
Inputgraph = {"A": ["B", "C"], "B": ["D"], "C": ["E"], "D": [], "E": []}, start = "A"Output{"bfs": ["A", "B", "C", "D", "E"], "dfs": ["A", "B", "D", "C", "E"]}WhyBFS visits nodes by distance from A, while DFS follows B to D before backtracking to C and E.
Example 2
Inputgraph = {1: [2, 3], 2: [4], 3: [], 4: []}, start = 2Output{"bfs": [2, 4], "dfs": [2, 4]}WhyOnly nodes reachable from 2 are included, and both traversals visit 4 after 2.
Example 3
Inputgraph = {1: [2], 2: [3], 3: [1]}, start = 1Output{"bfs": [1, 2, 3], "dfs": [1, 2, 3]}WhyThe visited set prevents infinite loops even though the graph contains a cycle.

Constraints

  • 0 <= len(graph) <= 10^4
  • 0 <= total number of edges <= 2 * 10^4
  • Graph may be directed and may contain cycles
  • Node values are hashable
  • Neighbors should be visited in the order they appear in each adjacency list

Function Signature

def graph_traversals(graph, start):

Problem

Problem

At Notion, graph traversal is used to explore dependency graphs and connected components. Given a graph as an adjacency list and a starting node, implement both Breadth-First Search (BFS) and Depth-First Search (DFS) and return the order in which nodes are visited.

Formal Specification

Write a function graph_traversals(graph, start) where:

  • graph is a dictionary mapping each node to a list of its neighbors
  • start is the node where traversal begins
  • Return a dictionary with two keys:
    • "bfs": list of nodes visited in BFS order
    • "dfs": list of nodes visited in DFS preorder

If start is not in the graph, return { "bfs": [], "dfs": [] }.

Traverse neighbors in the order they appear in the adjacency list.

Examples

Example 1 Input: graph = {"A": ["B", "C"], "B": ["D"], "C": ["E"], "D": [], "E": []}, start = "A" Output: {"bfs": ["A", "B", "C", "D", "E"], "dfs": ["A", "B", "D", "C", "E"]} Explanation: BFS explores level by level, while DFS goes as deep as possible before backtracking.

Example 2 Input: graph = {1: [2, 3], 2: [4], 3: [], 4: []}, start = 2 Output: {"bfs": [2, 4], "dfs": [2, 4]} Explanation: Starting from node 2, only nodes reachable from 2 are visited.

Constraints

  • 0 <= len(graph) <= 10^4
  • Total number of edges is at most 2 * 10^4
  • Graph may contain cycles
  • Node values are hashable

Examples

Example 1
Inputgraph = {"A": ["B", "C"], "B": ["D"], "C": ["E"], "D": [], "E": []}, start = "A"Output{"bfs": ["A", "B", "C", "D", "E"], "dfs": ["A", "B", "D", "C", "E"]}WhyBFS visits nodes by distance from A, while DFS follows B to D before backtracking to C and E.
Example 2
Inputgraph = {1: [2, 3], 2: [4], 3: [], 4: []}, start = 2Output{"bfs": [2, 4], "dfs": [2, 4]}WhyOnly nodes reachable from 2 are included, and both traversals visit 4 after 2.
Example 3
Inputgraph = {1: [2], 2: [3], 3: [1]}, start = 1Output{"bfs": [1, 2, 3], "dfs": [1, 2, 3]}WhyThe visited set prevents infinite loops even though the graph contains a cycle.

Constraints

  • 0 <= len(graph) <= 10^4
  • 0 <= total number of edges <= 2 * 10^4
  • Graph may be directed and may contain cycles
  • Node values are hashable
  • Neighbors should be visited in the order they appear in each adjacency list

Function Signature

def graph_traversals(graph, start):
Practice Python
Python 3.10
Open on desktop for the full Python editor with syntax highlighting and autocomplete.
Up next
Depth-First Traversal of GraphEasyFind Path Between Graph NodesEasyMetaBFS for System Dependency GraphMedium
Next question