Q14: How do you Clone a Undirected Graph (Deep Copy with Cycles)?
Use a HashMap<Node, Node> to store mappings of (originalNode -> clonedNode) to handle cyclic references. Traverse graph using DFS or BFS: for each node, if not already cloned, create a new clone node, place in map, and recursively clone neighbor relationships.
DFS Graph Clone Solution
import java.util.*;
class Node {
public int val;
public List<Node> neighbors;
public Node(int _val) { val = _val; neighbors = new ArrayList<>(); }
}
public class CloneGraph {
private static final Map<Node, Node> visited = new HashMap<>();
public static Node cloneGraph(Node node) {
if (node == null) return null;
if (visited.containsKey(node)) return visited.get(node);
Node cloneNode = new Node(node.val);
visited.put(node, cloneNode);
for (Node neighbor : node.neighbors) {
cloneNode.neighbors.add(cloneGraph(neighbor));
}
return cloneNode;
}
}💡 Tracks visited nodes in a map to manage cyclic graph references during deep cloning.
Key Takeaways
- HashMap tracks cloned copies to prevent infinite recursion on graph cycles.
- DFS/BFS graph traversal produces identical deep-copied connectivity.
Knowledge Check
What issue arises if you attempt to deep copy a cyclic graph without maintaining a visited map?