Skip to content

Commit 4e2b2a7

Browse files
committed
add: GraphDeepCopy
1 parent 54ee678 commit 4e2b2a7

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

java/Graphs/GraphDeepCopy.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
import DS.GraphNode;
5+
6+
/*
7+
// Definition of GraphNode:
8+
class GraphNode {
9+
public int val;
10+
public List<GraphNode> neighbors;
11+
public MultiLevelListNode(int val) {
12+
this.val = val;
13+
this.neighbors = new ArrayList<>();
14+
}
15+
}
16+
*/
17+
18+
public class GraphDeepCopy {
19+
public GraphNode graphDeepCopy(GraphNode node) {
20+
if (node == null) {
21+
return null;
22+
}
23+
Map<GraphNode, GraphNode> cloneMap = new HashMap<>();
24+
return dfs(node, cloneMap);
25+
}
26+
27+
private GraphNode dfs(GraphNode node, Map<GraphNode, GraphNode> cloneMap) {
28+
// If this node was already cloned, then return this previously
29+
// cloned node.
30+
if (cloneMap.containsKey(node)) {
31+
return cloneMap.get(node);
32+
}
33+
// Clone the current node.
34+
GraphNode clonedNode = new GraphNode(node.val);
35+
// Store the current clone to ensure it doesn't need to be created
36+
// again in future DFS calls.
37+
cloneMap.put(node, clonedNode);
38+
// Iterate through the neighbors of the current node to connect
39+
// their clones to the current cloned node.
40+
for (GraphNode neighbor : node.neighbors) {
41+
GraphNode clonedNeighbor = dfs(neighbor, cloneMap);
42+
clonedNode.neighbors.add(clonedNeighbor);
43+
}
44+
return clonedNode;
45+
}
46+
}

0 commit comments

Comments
 (0)