深拷贝:对于一张图而言,它的深拷贝即构建一张与原图结构,值均一样的图,但是其中的节点不再是原来图节点的引用。因此,为了深拷贝出整张图,我们需要知道整张图的结构以及对应节点的值。
由于题目只给了我们一个节点的引用,因此为了知道整张图的结构以及对应节点的值,我们需要从给定的节点出发,进行「图的遍历」,并在遍历的过程中完成图的深拷贝。
/*
// Definition for a 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;
}
}
*/
class Solution {
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<Node>());
visited.put(node,cloneNode);
for(Node neighber:node.neighbors){
cloneNode.neighbors.add(cloneGraph(neighber));
}
return cloneNode;
}
}