// Clone Graph // BFS,时间复杂度O(n),空间复杂度O(n) class Solution { public: UndirectedGraphNode *cloneGraph(const UndirectedGraphNode *node) { if (node == nullptr) return nullptr; // key is original node,value is copied node unordered_map copied; // each node in queue is already copied itself // but neighbors are not copied yet queue q; q.push(node); copied[node] = new UndirectedGraphNode(node->label); while (!q.empty()) { const UndirectedGraphNode *cur = q.front(); q.pop(); for (auto nbr : cur->neighbors) { // a copy already exists if (copied.find(nbr) != copied.end()) { copied[cur]->neighbors.push_back(copied[nbr]); } else { UndirectedGraphNode *new_node = new UndirectedGraphNode(nbr->label); copied[nbr] = new_node; copied[cur]->neighbors.push_back(new_node); q.push(nbr); } } } return copied[node]; } };