程式語言 - LeetCode - C++ - 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 {
public:
    Node* cloneGraph(Node* node) {
        unordered_map<Node*, Node*> q;

        if (!node) {
            return nullptr;
        }

        auto dfs = [&](this auto&& dfs, Node *cur) -> Node* {
            if (q.count(cur)) {
                return q[cur];
            }

            Node *copy = new Node(cur->val);
            q[cur] = copy;

            for (auto nei : cur->neighbors) {
                copy->neighbors.push_back(dfs(nei));
            }

            return copy;
        };

        return dfs(node);
    }
};