对于做过的题,一定要过遍数!!!
/**
* 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;
}
Map<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>();
Queue<UndirectedGraphNode> queue = new LinkedList<>();
UndirectedGraphNode cloneNode = new UndirectedGraphNode(node.label);
queue.offer(node);
map.put(node, cloneNode);
while (!queue.isEmpty()) {
UndirectedGraphNode curNode = queue.poll();
UndirectedGraphNode curNodeClone = map.get(curNode);
for (UndirectedGraphNode curNodeNeighbor: curNode.neighbors) {
if (map.containsKey(curNodeNeighbor)) {
UndirectedGraphNode curNodeNeighborClone = map.get(curNodeNeighbor);
curNodeClone.neighbors.add(curNodeNeighborClone);
} else {
UndirectedGraphNode curNodeNeighborClone = new UndirectedGraphNode(curNodeNeighbor.label);
curNodeClone.neighbors.add(curNodeNeighborClone);
map.put(curNodeNeighbor, curNodeNeighborClone);
queue.offer(curNodeNeighbor);
}
}
}
return cloneNode;
}
}