leetcode 11
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
class Node {
public int val;
public List<Node> neighbors;
}
/* // 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: unordered_map<Node*,Node*> visited; Node* cloneGraph(Node* node) { if(node == nullptr){//遍历结束,返回空 return node; } if(visited.find(node) != visited.end()){ //已经被访问过了,直接从哈希表中取出对应的克隆节点返回 return visited[node]; } Node* CloneNode = new Node(node->val); //克隆当前节点的值 visited[node] = CloneNode;//克隆后的存入哈希表中 for(auto& neighbor: node->neighbors)//对其邻居节点按照深度搜索遍历 { CloneNode->neighbors.emplace_back(cloneGraph(neighbor)); } return CloneNode; } };
注意:采用深度搜索遍历的形式挨个对图进行拷贝,注意记录一些顶点是否已经拷贝,使用哈希表对应(当前节点的指针,拷贝后的指针)。