题目是复制一个图,方法是使用广度优先历遍,然后使用HASHMAP判断重复然后放入队列。像这种clone或者两者比较的题目有个好的方法是使用map使他们之间建立映射。
public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if(node == null)
return null;
Queue<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
HashMap<UndirectedGraphNode, UndirectedGraphNode> map =
new HashMap<UndirectedGraphNode,UndirectedGraphNode>();
UndirectedGraphNode newHead = new UndirectedGraphNode(node.label);
queue.offer(node);
map.put(node, newHead);
while(!queue.isEmpty()){
UndirectedGraphNode curr = queue.poll();
//List<UndirectedGraphNode> currNeighbors = curr.neighbors;
for(UndirectedGraphNode aNeighbor: curr.neighbors){
if(!map.containsKey(aNeighbor)){
UndirectedGraphNode copy = new UndirectedGraphNode(aNeighbor.label);
map.put(aNeighbor,copy);
map.get(curr).neighbors.add(copy);
queue.add(aNeighbor);
}else{
map.get(curr).neighbors.add(map.get(aNeighbor));
}
}
}
return newHead;
}
}