forked from soulmachine/algorithm-essentials
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclone-graph-1.java
More file actions
24 lines (23 loc) · 1007 Bytes
/
clone-graph-1.java
File metadata and controls
24 lines (23 loc) · 1007 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Clone Graph
// DFS,时间复杂度O(n),空间复杂度O(n)
public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if(node == null) return null;
// key is original node,value is copied node
HashMap<UndirectedGraphNode, UndirectedGraphNode> visited = new HashMap<>();
clone(node, visited);
return visited.get(node);
}
// DFS
private static UndirectedGraphNode clone(UndirectedGraphNode node,
HashMap<UndirectedGraphNode,
UndirectedGraphNode> visited) {
// a copy already exists
if (visited.containsKey(node)) return visited.get(node);
UndirectedGraphNode new_node = new UndirectedGraphNode(node.label);
visited.put(node, new_node);
for (UndirectedGraphNode nbr : node.neighbors)
new_node.neighbors.add(clone(nbr, visited));
return new_node;
}
}