/** * Definition for undirected graph. * class UndirectedGraphNode { * int label; * ArrayList<UndirectedGraphNode> neighbors; * UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); } * }; */ import java.util.*; public class Solution { public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if(node == null ){ return null; } Map<UndirectedGraphNode,UndirectedGraphNode> map = new HashMap<UndirectedGraphNode,UndirectedGraphNode>(); return clone(node,map); } public UndirectedGraphNode clone(UndirectedGraphNode node, Map<UndirectedGraphNode,UndirectedGraphNode> map){ if(node == null){ return null; } if(map.containsKey(node)){ return map.get(node); } UndirectedGraphNode newNode = new UndirectedGraphNode(node.label); map.put(node,newNode); for(UndirectedGraphNode n : node.neighbors){ newNode.neighbors.add(clone(n,map)); } return newNode; } }