克隆图

35 阅读1分钟

package org.example.demo;  
  
import java.util.*;  
  
//克隆图  
//给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。  
//图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。  
//class Node {  
// public int val;  
// public List<Node> neighbors;  
//}  
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;  
        }  
}