forked from yubinbai/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.java
39 lines (39 loc) · 1.31 KB
/
Solution.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
31
32
33
34
35
36
37
38
39
import java.util.*;
class UndirectedGraphNode {
int label;
List<UndirectedGraphNode> neighbors;
UndirectedGraphNode(int x) {
label = x;
neighbors = new ArrayList<UndirectedGraphNode>();
}
};
public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if (node == null) {
return null;
}
UndirectedGraphNode ret = new UndirectedGraphNode(node.label);
HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<UndirectedGraphNode, UndirectedGraphNode>();
map.put(node, ret);
ArrayDeque<UndirectedGraphNode> q = new ArrayDeque<UndirectedGraphNode>();
q.offer(node);
// store all nodes
while (!q.isEmpty()) {
UndirectedGraphNode e = q.poll();
for (UndirectedGraphNode ee : e.neighbors) {
if (map.get(ee) == null) {
map.put(ee, new UndirectedGraphNode(ee.label));
q.offer(ee);
}
}
}
// store all edges
for (UndirectedGraphNode e : map.keySet()) {
UndirectedGraphNode target = map.get(e);
for (UndirectedGraphNode ee : e.neighbors) {
target.neighbors.add(map.get(ee));
}
}
return ret;
}
}