/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> neighbors;
Node() {
val = 0;
neighbors = vector<Node*>();
}
Node(int _val) {
val = _val;
neighbors = vector<Node*>();
}
Node(int _val, vector<Node*> _neighbors) {
val = _val;
neighbors = _neighbors;
}
};
*/
class Solution {
private:
unordered_map<Node*, Node*> oldToNew;
public:
Node* cloneGraph(Node* node)
{
if (!node) return nullptr;
if (oldToNew.count(node)) return oldToNew[node];
oldToNew[node] = new Node(node->val);
for (auto& nei : node->neighbors)
{
oldToNew[node]->neighbors.push_back(cloneGraph(nei));
}
return m[node];
}
};
- T: O(V+E)
- S: O(V)