思路分析:整体就是通过HashMap<Node,Node>visited以及dfs完成克隆,前面的Node是原来的,后面的Node就是克隆下的Node结点,每一个Node包含一个int值,以及相邻Node的集合列表。
读题:这里题目中给出了一个结点node,并且要求返回一个克隆好的node结点,因此这里我们先把此node传入dfs函数中。
dfs函数:传入一个node,传入一个visited的Map数组
然后dfs常规套路先判断,何时回溯,这里只要visited里面包含node就证明已经克隆过此节点,回溯。记得对空值判断。
然后我们进行克隆,先开一个Node对象clone,赋值clone的val值,然后遍历原来node的neighbors列表,将clone.neighbors的值也进行克隆。
代码官网也有很多版本。
class Solution {
public Node cloneGraph(Node node) {
Map<Node, Node> visited = new HashMap<>();
return dfs(node, visited);
}
private Node dfs(Node node,Map<Node,Node> visited){
if(node == null)return null;
if(visited.containsKey(node))return visited.get(node);
Node clone = new Node(node.val,new ArrayList<>());
visited.put(node,clone);
for(Node n:node.neighbors){
clone.neighbors.add(dfs(n,visited));
}
return clone;
}
}