题目描述:
提示:
节点数介于 1 到 100 之间。
无向图是一个简单图,这意味着图中没有重复的边,也没有自环。
由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
必须将给定节点的拷贝作为对克隆图的引用返回。
使用递归来完成dfs
代码:
class Solution {
public Node cloneGraph(Node node) {
return helper(node,new HashMap<Node,Node>());
}
public Node helper(Node oldNode,HashMap<Node,Node> hashMap){
if(oldNode == null){
return null;
}
hashMap.put(oldNode,new Node(oldNode.val,new ArrayList<Node>()));
for(Node temp:oldNode.neighbors){
// 判断当前是否已经放入
if(!hashMap.containsKey(temp)){
// 递归进行子邻居的获取
Node newNode=helper(temp,hashMap);
hashMap.get(oldNode).neighbors.add(newNode);
}else{
// 如果已经有,则更新当前的节点
hashMap.get(oldNode).neighbors.add(hashMap.get(temp));
}
}
return hashMap.get(oldNode);
}
}