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; } }
|