Depth-First Search
Copy Graph
easy
DESCRIPTION (credit Leetcode.com)
Given a reference to a variable node which is part of an undirected, connected graph, write a function to return a copy of the graph as an adjacency list in dictionary form. The keys of the adjacency list are the values of the nodes, and the values are the neighbors of the nodes.
node is an instance of the following class, where neighbors is a list of references to other nodes in the graph (also of type IntGraphNode):
Example 1:
Input:
Output:
Example 2: Input:
Output:
Explanation
- Add the value of the node as a key in the adjacency list, and a list of its neighbor's values as the value in the dictionary.
- Recursively call the dfs function on each neighbor of the node.
def clone_graph(node):adj_list = {}def dfs(node):if node.value in adj_list:returnadj_list[node.value] = [n.value for n in node.neighbors]for neighbor in node.neighbors:dfs(neighbor)if node:dfs(node)return adj_list
Initialization
copy graph
0 / 2
Depth-First Search
recursive call
0 / 1
add to adj_list
0 / 5
recursive call
0 / 2
Animated Solution
copy graph
0 / 26
Test Your Knowledge
Login to take the complexity quiz and track your progress
Complexity Analysis
Time Complexity: O(N + M) where N is the number of nodes and M is the number of edges in the graph for the depth-first search traversal.
Space Complexity: O(N + M) where N is the number of nodes and M is the number of edges in the graph. The space complexity is due to the adjacency list that stores the graph structure: each of the N nodes is stored once as keys, and each of the M edges is stored as part of the values in the dictionary.
Mark as read
Your account is free and you can post anonymously if you choose.