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