LeetCode: Clone Graph

 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 }

 

posted on 2014-03-09 03:07  longhorn  阅读(246)  评论(0编辑  收藏  举报

导航