题目
解释
核心:深拷贝(本篇blog最后有解释) 建立新的内存,将该图复制到新的内存中
思路
DFS&map DFS:利用DFS遍历,并复制到新的结构体中
AC代码
class Solution {
private:
map<Node*, Node*>visited;
public:
Node* cloneGraph(Node* node) {
if(!node)
return NULL;
if(visited.count(node))
return visited[node];
else{
Node *cloneNode =new Node(node->val);
visited[node] = cloneNode;
for(Node* n : node->neighbors)
cloneNode->neighbors.push_back(cloneGraph(n));
return cloneNode;
}
}
};
关于深拷贝和浅拷贝
浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址 深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
eg:对于A,B对A进行浅拷贝,C对A进行深拷贝 现释放A的内存: B由于指向A的地址,受A影响,随A的释放而释放。 C不受影响。
|