https://leetcode.com/problems/clone-graph/description
Q. 주어진 그래프를 deep copy 하여 반환하라.
Solution
기존 graph를 순회하며 모든 node의 포인터를 중복되지 않게 우선 저장한다.
이후 각 노드의 neighbors만큼 새로운 node를 만든다.
새로운 노드를 순회하며, 각자의 neighbors에 새로운 node를 link한다.
코드
더보기
Node* cloneGraph(Node* node)
{
if(node == nullptr) return node;
// adding nodes into map.
set<Node*> setNodes;
queue<Node*> qBuff;
qBuff.push(node);
while(qBuff.size() > 0)
{
Node* node2 = qBuff.front();
qBuff.pop();
if(setNodes.find(node2) != setNodes.end())
continue;
setNodes.insert(node2);
for(int q = 0; q < node2->neighbors.size(); ++q)
qBuff.push(node2->neighbors[q]);
}
//cout << "set size : " << setNodes.size() << endl;
map<int, Node*> mapNodes;
for(auto iter = setNodes.begin(); iter != setNodes.end(); ++iter)
{
Node* cur = *iter;
if(mapNodes.find(cur->val) == mapNodes.end())
{
Node* newNode = new Node(cur->val);
mapNodes[cur->val] = newNode;
}
}
//cout << "map size : " << mapNodes.size() << endl;
for(auto iter = setNodes.begin(); iter != setNodes.end(); ++iter)
{
Node* cur = *iter;
Node* target = mapNodes[cur->val];
for(int q = 0; q < cur->neighbors.size(); ++q)
{
target->neighbors.push_back( mapNodes[cur->neighbors[q]->val ] );
}
}
return mapNodes[node->val];
}
결과
'Leetcode > Top Interview 150' 카테고리의 다른 글
[Graph General][Medium] 130. Surrounded Regions (1) | 2024.06.16 |
---|---|
[Binary Seach Tree][Easy] 530. Minimum Absolute Difference in BST (0) | 2024.06.15 |
[Binary Tree BFS][Medium] 103. Binary Tree Zigzag Level Order Traversal (0) | 2024.06.14 |
[Binary Tree BFS][Easy] 637. Average of Levels in Binary Tree (0) | 2024.06.14 |
[Binary Tree General][Medium] 173. Binary Search Tree Iterator (1) | 2024.06.13 |