Given a reference of a node in a connected undirected graph, return a deep copy (clone) of the graph. Each node in the graph contains a val (int
) and a list (List[Node]
) of its neighbors.
/* 深度复制一个无向图
* 关键是保证节点直接的对应关系不能变
* 可以建立map 映射原节点到新节点
* map[old] 不存在时 就可以创建新节点
* 若用dfs
* */
class Solution {
public:
Node* cloneGraph(Node* node) {
unordered_map<Node*, Node*> m;
return dfs(m, node);
}
// 拷贝当前节点 node 是原图中的节点 tmp是复制的节点
Node* dfs(unordered_map<Node*, Node*> &m, Node *node){
if(!node) return NULL;
else if(m.count(node)) return m[node];
Node *tmp = new Node(node->val, {});
m[node] = tmp;
for(auto &neibor : node->neighbors){
tmp->neighbors.push_back(dfs(m, neibor));
}
return tmp;
}
};