题目描述
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
涉及tag
dfs;图;bfs
算法思路
用哈希表,node为键,value为值,如果已经有node节点,就直接用get方法去取,如果没有,就new一个新的节点。
示例代码1
dfs
class Solution {
public Node cloneGraph(Node node) {
Map<Node, Node> lookup = new HashMap<>();
return dfs(node, lookup);
}
private Node dfs(Node node, Map<Node,Node> lookup) {
if (node == null) return null;
if (lookup.containsKey(node)) return lookup.get(node);
Node clone = new Node(node.val, new ArrayList<>());
lookup.put(node, clone);
for (Node n : node.neighbors)
clone.neighbors.add(dfs(n,lookup));
return clone;
}
}
示例代码2
bfs