-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClone Graph.java
30 lines (27 loc) · 1.05 KB
/
Clone Graph.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* Definition for undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
* };
*/
public class Solution {
Map<Integer, UndirectedGraphNode> map = new HashMap<>();
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if(node == null) return node;
return dfs(node);
}
public UndirectedGraphNode dfs(UndirectedGraphNode node) {
if(map.containsKey(node.label)) return map.get(node.label);
UndirectedGraphNode newNode = new UndirectedGraphNode(node.label);
// save to map before recursion to avoid inf. loop
// neighbors will be automatically added to the node saved
map.put(newNode.label, newNode);
List<UndirectedGraphNode> nbrs = node.neighbors;
for(UndirectedGraphNode nbr: nbrs) {
newNode.neighbors.add(dfs(nbr));
}
return newNode;
}
}