Back to all solutions
#133 - Clone Graph
Problem Description
Given a reference of a node in a connected undirected graph.
Return a deep copy (clone) of the graph.
Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors.
Test case format:
- For simplicity, each node's value is the same as the node's index (1-indexed). For example, the first node with val == 1, the second node with val == 2, and so on. The graph is represented in the test case using an adjacency list.
- An adjacency list is a collection of unordered lists used to represent a finite graph. Each list describes the set of neighbors of a node in the graph.
- The given node will always be the first node with val = 1. You must return the copy of the given node as a reference to the cloned graph.
Solution
/**
* // Definition for a Node.
* function Node(val, neighbors) {
* this.val = val === undefined ? 0 : val;
* this.neighbors = neighbors === undefined ? [] : neighbors;
* };
*/
/**
* @param {Node} node
* @return {Node}
*/
var cloneGraph = function(node) {
const map = new Map();
return node && cloneNode(node, map);
};
function cloneNode(node, map) {
const cloned = new Node(node.val, node.neighbors);
map.set(node.val, cloned);
cloned.neighbors = node.neighbors && node.neighbors.map(n => {
return map.get(n.val) || cloneNode(n, map);
});
return cloned;
}