- /*
- // 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:
- std::map<int, Node*> cloneNodeMap;
- Node* cloneGraph(Node* curNode) {
- if (curNode == nullptr)
- return nullptr;
- auto cloneNode = new Node(curNode->val);
- cloneNodeMap[curNode->val] = cloneNode;
- for (Node* neighbor : curNode->neighbors) {
- if (cloneNodeMap[neighbor->val] == nullptr) {
- Node* cloneNeighbor = cloneGraph(neighbor);
- cloneNode->neighbors.push_back(cloneNeighbor);
- }
- else
- cloneNode->neighbors.push_back(cloneNodeMap[neighbor->val]);
- }
- return cloneNode;
- }
- };