这是典型的DFS或者BFS遍历图的题目。图的遍历一般都要一个哈希表或者数组,来记录这个节点是否遍历过。这里为了简单,直接用一个HashMap映射旧节点以及新节点
class Solution {
public:
unordered_map<Node*,Node*> hashmap;
Node* cloneGraph(Node* node) {
return dfs(node);
}
Node* dfs(Node* node){
if(node==NULL) return node;
if(hashmap.count(node)) return hashmap[node];
Node* newnode = new Node(node->val);
hashmap[node] = newnode;
for(int i=0;i<node->neighbors.size();i++){
newnode->neighbors.push_back(dfs(node->neighbors[i]));
}
return newnode;
}
};
BFS 稍微有点难想。