/*
// Definition for a Node.
class Node {
public:
int val;
vector neighbors;
Node() {
val = 0;
neighbors = vector();
}
Node(int _val) {
val = _val;
neighbors = vector();
}
Node(int _val, vector _neighbors) {
val = _val;
neighbors = _neighbors;
}
};
*/
class Solution {
public:
unordered_map map;
Node* cloneGraph(Node* node) {
if (node == NULL) return NULL;
return dfs(node);
}
Node* dfs(Node* node) {
if (map.find(node) != map.end()) return map[node];
Node* clone = new Node(node->val);
map[node] = clone; // map OLD node to NEW node!
for (Node* n : node->neighbors)
clone->neighbors.push_back(dfs(n));
return clone;
}
};