Poison

133. Clone Graph

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public Node cloneGraph(Node node) {
if (node == null) {
return null;
}

Map<Node, Node> originalToCloneNodeMap = new IdentityHashMap<>();
return cloneNode(node, originalToCloneNodeMap);
}

private List<Node> cloneNeighbors(List<Node> neighbors, Map<Node, Node> originalToCloneNodeMap) {
if (neighbors.isEmpty()) {
return Collections.emptyList();
}

List<Node> cloneNeighbors = new ArrayList<>(neighbors.size());
for (Node node : neighbors) {
cloneNeighbors.add(cloneNode(node, originalToCloneNodeMap));
}

return cloneNeighbors;
}

private Node cloneNode(Node node, Map<Node, Node> originalToCloneNodeMap) {
Node cloneNode = originalToCloneNodeMap.get(node);
if (cloneNode != null) {
return cloneNode;
}

cloneNode = new Node(node.val);
originalToCloneNodeMap.put(node, cloneNode);
cloneNode.neighbors = cloneNeighbors(node.neighbors, originalToCloneNodeMap);
return cloneNode;
}
}
Reference

133. Clone Graph