使用HashMap当作新的点和老的点之间的映射,先将点复制一份,再根据hashMap来连接边
class Solution {
public:
unordered_map<Node*,Node*> hashmap;
Node* cloneGraph(Node* node) {
if(node==NULL) return node;
dfs(node); // 先复制所有的点
for(auto [s, d]:hashmap){
for(auto neighbor:s->neighbors){
d->neighbors.push_back(hashmap[neighbor]);
}
}
return hashmap[node];
}
void dfs(Node* node){
Node* newNode = new Node(node->val);
hashmap[node] = newNode;
for(auto neighbor:node->neighbors){
if(!hashmap.count(neighbor)){
dfs(neighbor);
}
}
}
};