A BFS usage.
class Solution { public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if (!node) return NULL; UndirectedGraphNode *pRet = NULL; queue<UndirectedGraphNode*> q; unordered_map<int, UndirectedGraphNode *> map; q.push(node); while (!q.empty()) { UndirectedGraphNode *p = q.front(); // Create new node UndirectedGraphNode *pNew = NULL; if (map.find(p->label) == map.end()) { pNew = new UndirectedGraphNode(p->label); map[p->label] = pNew; if (!pRet) pRet = pNew; } else { pNew = map[p->label]; } for (UndirectedGraphNode *pC : p->neighbors) { UndirectedGraphNode *pNewC = NULL; if (map.find(pC->label) == map.end()) { pNewC = new UndirectedGraphNode(pC->label); map[pC->label] = pNewC; q.push(pC); } else { pNewC = map[pC->label]; } pNew->neighbors.push_back(pNewC); } q.pop(); } return pRet; } };