133. Clone Graph

/*
// 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)O(V + E)
  • S: O(V)O(V)