代码拉取完成,页面将自动刷新
/*
// 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 *recursion(Node *node, map<Node *, Node *> &nmap) {
/* 遍历相邻节点 */
for (int i = 0; i < node->neighbors.size(); i++) {
Node *ptr = node->neighbors[i];
/* 如果当前指向的节点未被映射 */
if (nmap.find(ptr) == nmap.end()) {
/* 拷贝节点 */
Node *p = new Node(node->neighbors[i]->val, node->neighbors[i]->neighbors);
/* 建立映射并深度递归 */
nmap[ptr] = p;
node->neighbors[i] = nmap[ptr];
node->neighbors[i] = recursion(node->neighbors[i], nmap);
}
/* 已经存在对应旧节点的拷贝 */
else {
/* 创建节点的时候已经进行过递归拷贝,此时只需要修改指针即可 */
node->neighbors[i] = nmap[ptr];
}
}
return node;
}
Node* cloneGraph(Node* node) {
if (node == nullptr)
return nullptr;
/* 将原图的地址映射向新图 */
map<Node *, Node *> nmap;
/* 创建新图的起始节点 */
Node *ans = new Node(node->val, node->neighbors);
nmap[node] = ans;
/* 深度优先递归 */
return recursion(ans, nmap);
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。