Reference: LeetCode
Difficulty: Medium
Problem
Given a reference of a node in a
connected undirected graph, return a deep copy (clone) of the graph. Each node in the graph contains a val (int) and a list (List[Node]) of its neighbors.
![]()
Note:
- The number of nodes will be between 
1and100. - The undirected graph is a 
simple graph, which means no repeated edges and no self-loops in the graph. - Since the graph is undirected, if node 
phas nodeqas neighbor, then nodeqmust have nodepas neighbor too. - You must return the copy of the given node as a reference to the cloned graph.
 
Analysis
DFS (recursion)
1  | public Node cloneGraph(Node node) {  | 
Optimization: We can combine dfsSetMap and dfsSetNeighbors to get clean code!
1  | private void dfs(Node node, Map<Node, Node> map) {  | 
Time: $O(V + E)$
Space: $O(V)$