133. Clone Graph - jiejackyzhang/leetcode-note GitHub Wiki
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.
采用hash map来表示graph。 clone的过程可以通过dfs完成,如果map中已经存在node,则返回该node,否则clone该node。
/**
* Definition for undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
* };
*/
public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
Map<Integer, UndirectedGraphNode> map = new HashMap<>();
return dfs(node, map);
}
private UndirectedGraphNode dfs(UndirectedGraphNode node, Map<Integer, UndirectedGraphNode> map) {
if(node == null) return null;
if(map.containsKey(node.label)) {
return map.get(node.label);
} else {
UndirectedGraphNode clone = new UndirectedGraphNode(node.label);
map.put(node.label, clone);
for(UndirectedGraphNode neighbor : node.neighbors) {
clone.neighbors.add(dfs(neighbor, map));
}
return clone;
}
}
}