DDSA Solutions

Clone an Undirected Graph

Time: O(V+E)
Space: O(V)
Advertisement

Intuition

BFS/DFS with a HashMap from original node to clone. For each original node, create clone and process its neighbors.

Algorithm

  1. 1Map: original -> clone. BFS queue.
  2. 2For each neighbor of original: if not in map, create clone and add to queue. Add clone to cloneNode.neighbors.

Common Pitfalls

  • Use visited map to avoid infinite loops in cyclic graphs.
Clone an Undirected Graph.java
Java
// Approach: BFS/DFS with a HashMap mapping original nodes to clones.
// For each neighbor, create clone if absent and add to cloned adjacency list.
// Time: O(V+E) Space: O(V)
import java.util.*;

class Node {
    int val;
    ArrayList<Node> neighbors;

    public Node() {
        val = 0;
        neighbors = new ArrayList<>();
    }

    public Node(int val) {
        this.val = val;
        neighbors = new ArrayList<>();
    }

    public Node(int val, ArrayList<Node> neighbors) {
        this.val = val;
        this.neighbors = neighbors;
    }
}

class Solution {
    Node cloneGraph(Node node) {
        Set<Node> vis = new HashSet<>();
        return dfs(node, vis);
    }

    private Node dfs(Node node, Set<Node> vis) {
        vis.add(node);
        Node copyNode = new Node(node.val);
        for (Node neighbour : node.neighbors) {
            if (!vis.contains(neighbour))
                copyNode.neighbors.add(dfs(neighbour, vis));
        }

        return copyNode;
    }
}
Advertisement
Was this solution helpful?