克隆无向图,也即是遍历途中每个节点并克隆该节点。
可采用深度或着广度优先遍历。
该问题需要注意的是不重复拷贝结点,可以使用unorder_,map来保存已经克隆过的结点。
代码
class Solution {
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node)
{
unordered_map<int, UndirectedGraphNode*> neighborNodes;
return cloneGraphHelper(node, neighborNodes);
}
UndirectedGraphNode* cloneGraphHelper(UndirectedGraphNode *node, unordered_map<int, UndirectedGraphNode*> & neighborNodes)
{
if(node==NULL) return node;
if(neighborNodes.count(node->label)) return neighborNodes[node->label];
UndirectedGraphNode *temp = new UndirectedGraphNode(node->label);
neighborNodes[node->label] = temp;
for(int i = 0; i < node->neighbors.size(); ++i)
{
temp->neighbors.push_back( cloneGraphHelper(node->neighbors[i],neighborNodes)) ;
}
return temp;
}
};
本文介绍了一种通过深度优先搜索实现无向图克隆的方法。重点在于避免重复克隆节点,利用unordered_map记录已克隆节点。适用于需要复制复杂图结构的场景。
451

被折叠的 条评论
为什么被折叠?



