Repository navigation
Expand file tree
/
Copy pathCloneGraph.java
More file actions
43 lines (39 loc) · 1.57 KB
/
Copy pathCloneGraph.java
File metadata and controls
43 lines (39 loc) · 1.57 KB
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
40
41
42
43
/**
* Definition for undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
* };
*/
public class CloneGraph {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if (node == null)
return null;
HashMap<Integer, UndirectedGraphNode> hm = new HashMap<Integer, UndirectedGraphNode>();
Queue<UndirectedGraphNode> q = new LinkedList<UndirectedGraphNode>();
HashSet<Integer> isVisited = new HashSet<Integer>();
UndirectedGraphNode head = new UndirectedGraphNode(node.label);
hm.put(head.label, head);
UndirectedGraphNode itr;
q.offer(node);
while (!q.isEmpty()) {
UndirectedGraphNode queueNode = q.poll();
if (isVisited.contains(queueNode.label))
continue;
itr = hm.get(queueNode.label); // guarantee to contain
isVisited.add(queueNode.label);
for (UndirectedGraphNode element : queueNode.neighbors) {
if (hm.containsKey(element.label))
itr.neighbors.add(hm.get(element.label));
else {
UndirectedGraphNode aNode = new UndirectedGraphNode(element.label);
itr.neighbors.add(aNode);
hm.put(aNode.label, aNode);
}
q.offer(element);
}
}
return head;
}
}