public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if (node == null) return null;
UndirectedGraphNode newNode = new UndirectedGraphNode(node.label); //new node for return
HashMap<Integer, UndirectedGraphNode> map = new HashMap(); //store visited nodes
map.put(newNode.label, newNode); //add first node to HashMap
LinkedList<UndirectedGraphNode> queue = new LinkedList(); //to store **original** nodes need to be visited
queue.add(node); //add first **original** node to queue
while (!queue.isEmpty()) { //if more nodes need to be visited
UndirectedGraphNode n = queue.pop(); //search first node in the queue
for (UndirectedGraphNode neighbor : n.neighbors) {
if (!map.containsKey(neighbor.label)) { //add to map and queue if this node hasn't been searched before
map.put(neighbor.label, new UndirectedGraphNode(neighbor.label));
queue.add(neighbor);
}
map.get(n.label).neighbors.add(map.get(neighbor.label)); //add neighbor to new created nodes
}
}
return newNode;
}
dfs: public class Solution { public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { HashMap<Integer, UndirectedGraphNode> map = new HashMap<Integer, UndirectedGraphNode>(); return dfs(node, map); }
}
bfs
public class Solution { public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node == null) return null;
}