复制图的结构,直接使用BFS广度优先搜索的方法进行图的遍历
利用HashMap作为是否访问过的标记
<span style="font-size:18px;">/**
* Definition for undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
* };
*/
public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if(node == null) return node;
HashMap<Integer, UndirectedGraphNode> cloneMap = new HashMap<>();
UndirectedGraphNode clone = new UndirectedGraphNode(node.label);
LinkedList<UndirectedGraphNode> nodeQueue = new LinkedList<>();
nodeQueue.add(node);
cloneMap.put(clone.label, clone);
while(!nodeQueue.isEmpty()){
UndirectedGraphNode top = nodeQueue.pop();
UndirectedGraphNode cloneTop = cloneMap.get(top.label);
for(UndirectedGraphNode t : top.neighbors){
UndirectedGraphNode cloneT = cloneMap.get(t.label);
if(cloneT == null){
cloneT = new UndirectedGraphNode(t.label);
cloneMap.put(cloneT.label, cloneT);
nodeQueue.push(t);
}
cloneTop.neighbors.add(cloneT);
}
}
return clone;
}
}</span>