Clone Graph

只写了DFS递归版,以后复习时再写BFS,DFS非递归版,戳 参考链接

public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if(node == null) return null;
HashMap<UndirectedGraphNode, UndirectedGraphNode> map = 

new HashMap<UndirectedGraphNode, UndirectedGraphNode>();
UndirectedGraphNode cloneNode = new UndirectedGraphNode(node.label);
map.put(node, cloneNode);
dfs(map, node);
return cloneNode;
}

private void dfs(HashMap<UndirectedGraphNode, UndirectedGraphNode> map, UndirectedGraphNode node) {
if(node == null) return;
for(UndirectedGraphNode neighbor : node.neighbors) {
if(!map.containsKey(neighbor)) { //用map兼职check是否visit过。
UndirectedGraphNode cloneNeighbor = new UndirectedGraphNode(neighbor.label);
map.put(neighbor, cloneNeighbor);
dfs(map, neighbor);
}
map.get(node).neighbors.add(map.get(neighbor)); //这句是精华,把cloneNeighor加进去
}
}
}


posted @ 2014-12-28 11:03  江南第一少  阅读(81)  评论(0)    收藏  举报