1 public class Solution {
2 public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
3 Map<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<UndirectedGraphNode, UndirectedGraphNode>();
4 Queue<UndirectedGraphNode> nodes = new LinkedList<UndirectedGraphNode>();
5 if (node == null) return node;
6
7 UndirectedGraphNode head = new UndirectedGraphNode(node.label);
8 map.put(node, head);
9 nodes.add(node);
10
11 while (!nodes.isEmpty()) {
12 UndirectedGraphNode org = nodes.poll();
13 UndirectedGraphNode k = map.get(org);
14 for (UndirectedGraphNode t : org.neighbors) {
15 UndirectedGraphNode n;
16 if (!map.containsKey(t)) {
17 n = new UndirectedGraphNode(t.label);
18 map.put(t, n);
19 nodes.add(t);//如果这是一个新的node,需要将其放入队列中,准备将其neighbors赋值。
20 }
21 else {
22 n = map.get(t);
//这里不再需要放入队列中,因为这个节点已经存在,说明它一定被创建过,一定也就被放入到队列中过。
23 }
24 k.neighbors.add(n);
25 }
26 }
27 return head;
28 }
29 }