public Node cloneGraph(Node node){ if(node == null){ returnnull; }
Map<Node, Node> visited = new HashMap<>(); LinkedList<Node> queue = new LinkedList<>(); //将给定的结点加入列表 queue.add(node); //克隆第一个结点并存储到哈希表 visited.put(node, new Node(node.val, new ArrayList<>()));
while(!queue.isEmpty()){ //取出队列的头结点 Node n = queue.remove(); //遍历该结点的邻居 for(Node t : n.neighbors){ if(!visited.containsKey(t)){ //如果没有访问过,就克隆并存储在哈希表中 visited.put(t, new Node(t.val, new ArrayList<>())); //将邻居结点加入队列中 queue.add(t); } //更新当前结点的邻居列表 visited.get(n).neighbors.add(visited.get(t)); } } return visited.get(node); }