package org.example.demo;
import java.util.*;
public class CloneGraphSolution {
private HashMap<Node,Node> visited =new HashMap<>();
public Node cloneGraph(Node node){
if(node==null) return node;
if(visited.containsKey(node)){
return visited.get(node);
}
Node cloneNode=new Node(node.val,new ArrayList<>());
visited.put(node,cloneNode);
for(Node neighbor:node.neighbors){
cloneNode.neighbors.add(cloneGraph(neighbor));
}
return cloneNode;
}
public Node cloneGraphTwo(Node node){
if(node==null)return node;
HashMap<Node,Node> visited=new HashMap<>();
Queue<Node> queue=new LinkedList<Node>();
queue.add(node);
visited.put(node,new Node(node.val,new ArrayList<>()));
while (!queue.isEmpty()){
Node n=queue.remove();
for(Node ne:n.neighbors){
if(!visited.containsKey(ne)){
visited.put(ne,new Node(ne.val,new ArrayList<>()));
queue.add(ne);
}
visited.get(n).neighbors.add(visited.get(ne));
}
}
return visited.get(node);
}
}
class Node{
public int val;
public List<Node> neighbors;
public Node(){
val=0;
neighbors=new ArrayList<Node>();
}
public Node(int _val){
val=_val;
neighbors=new ArrayList<Node>();
}
public Node(int _val,ArrayList<Node> _neighbors){
val=_val;
neighbors=_neighbors;
}
}