133. Clone Graph
/**
* Definition for undirected graph.
* struct UndirectedGraphNode {
* int label;
* vector<UndirectedGraphNode *> neighbors;
* UndirectedGraphNode(int x) : label(x) {};
* };
*/
class Solution {
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if (!node) return NULL;
if (!copies.count(node)) {
copies[node] = new UndirectedGraphNode(node->label);
for (UndirectedGraphNode* nei:(node->neighbors))
copies[node]->neighbors.push_back(cloneGraph(nei));
}
return copies[node];
}
private:
unordered_map<UndirectedGraphNode *, UndirectedGraphNode *> copies;
};