给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
class Node {
public int val;
public List neighbors;
}
输入:adjList = [[2,4],[1,3],[2,4],[1,3]]
输出:[[2,4],[1,3],[2,4],[1,3]]
解释:
图中有 4 个节点。
节点 1 的值是 1,它有两个邻居:节点 2 和 4 。
节点 2 的值是 2,它有两个邻居:节点 1 和 3 。
节点 3 的值是 3,它有两个邻居:节点 2 和 4 。
节点 4 的值是 4,它有两个邻居:节点 1 和 3 。
class Solution {
public Node cloneGraph(Node node) {
if(node==null) return node;
Queue<Node>queue=new LinkedList<>();
Map<Integer,Node> map=new HashMap<>();
queue.add(node);
Node head=new Node(node.val,new ArrayList<>());
map.put(node.val,head);
while (!queue.isEmpty())
{
Node curO=queue.poll();
for(Node next:curO.neighbors)
{
if(map.containsKey(next.val))//节点已经新建了
{
map.get(curO.val).neighbors.add(map.get(next.val));//直接加入邻居节点
}else{
Node none=new Node(next.val,new ArrayList<>());//新建节点并且入队
map.put(next.val,none);
map.get(curO.val).neighbors.add(none);
queue.add(next);
}
}
}
return head;
}
}