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 }
LeetCode: Clone Graph,布布扣,bubuko.com
原文:http://www.cnblogs.com/longhorn/p/3589499.html