Given a reference of a node in a connected undirected graph, return a deep copy (clone) of the graph. Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors.
DFS/BFS with Node Mapping
To perform a deep copy of a graph, we must create new objects for every node. To avoid infinite loops in cyclic graphs and to reuse already cloned nodes, we use a Hash Map to store the mapping from `original_node` to `cloned_node`. If a node is already in the map, we return its clone; otherwise, we create a new node and recursively clone all its neighbors.