133.克隆图 (Medium)*
题目描述*
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
class Node {
public int val;
public List<Node> neighbors;
}
提示*
节点数介于 1 到 100 之间。每个节点值都是唯一的。
无向图是一个简单图,这意味着图中没有重复的边,也没有自环。
由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
图是连通图,你可以从给定节点访问到所有节点。
代码*
dfs,用 unordered_map 保存已生成结点。
/*
// 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:
Node* cloneGraph(Node* node) {
if(node == nullptr) {
return nullptr;
}
unordered_map<Node*, Node*> nodeMap;
return dfs(node, nodeMap);
}
Node* dfs(Node* node, unordered_map<Node*, Node*>& nodeMap) {
if(nodeMap.count(node)) {
return nodeMap[node];
}
Node *cur = new Node(node->val);
nodeMap[node] = cur;
for(int i = 0; i < node->neighbors.size(); i++) {
if(node->neighbors[i] != nullptr) {
cur->neighbors.push_back(dfs(node->neighbors[i], nodeMap));
}
}
return cur;
}
};
最后更新: July 23, 2022