You're given a node in a connected undirected graph. Each node contains a value and a list of neighbors. Your task: return a deep copy of the graph.
This means creating completely new node objects with the same values and connections as the original. If node 1 connects to node 2 in the original, your copied node 1 must connect to your copied node 2.
The challenge: as you traverse the graph with DFS, how do you avoid creating duplicate copies of the same node? If node 1 and node 2 both reference node 3, you need exactly one copy of node 3.