题目:克隆图
问题描述:
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
class Node {
public int val;
public List<Node> neighbors;
}
解决思路:
经过分析,此问题可分为3种情况来解决:
1、如果 node 为空,则直接返回。
2、如果 node 已经存在于用于存储已克隆节点的 map 中,那么也直接返回。
3、按照2的逻辑,如果 node 不存在于 map 中,那么根据当前 node 创建新的克隆节点,并且根据 DFS 遍历 node 的邻接列表加入到新创建克隆节点的邻接列表中。
解决代码:
class Solution {
private Map<Integer, Node> visitedMap = new HashMap<>();
public Node cloneGraph(Node node) {
// 1.
if(node == null) {
return null;
}
// 2.
Node clone = visitedMap.get(node.val);
if(clone != null) {
return clone;
}
// 3.
clone = new Node(node.val);
visitedMap.put(node.val, clone);
for(Node neighborNode : node.neighbors) {
clone.neighbors.add(cloneGraph(neighborNode));
}
return clone;
}
}