问题描述:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/clone-graph/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果:
代码描述:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> neighbors;
Node() {}
Node(int _val, vector<Node*> _neighbors) {
val = _val;
neighbors = _neighbors;
}
};
*/
class Solution {
public:
map<Node*, Node*> dict; // 全局变量
Node* clone(Node* node)
{
if(!node)
return node;
if(dict.count(node)) return dict[node]; //发现val,返回val。相当于visited[] 访问过,则退出。
dict[node] = new Node(node->val, vector<Node*>()); // 如果没有val,则添加。
vector<Node*>::iterator it = node->neighbors.begin();
// 循环将邻居都push_back进去,并且push_back的同时,连带clone。(*it 才是 *node)
for(; it != node->neighbors.end(); ++it)
{
dict[node]->neighbors.push_back(clone(*it));
}
return dict[node];
}
Node* cloneGraph(Node* node) {
return clone(node);
}
};