题目链接
克隆图
题目描述
注意点
- 节点数不超过100
- 每个节点值 Node.val 都是唯一的,1 <= Node.val <= 100
- 无向图是一个简单图,这意味着图中没有重复的边,也没有自环
- 图是连通图,可以从给定节点访问到所有节点
解答思路
- 本题是要完成图的深拷贝,所以关键是找到所有的节点并将节点的值和相邻点的关系保存到新的节点中
- 可以使用深度优先遍历或广度优先遍历,下面解法使用深度优先遍历:使用哈希表存储旧的节点和新的节点之间的关系(防止同一个节点创建多次),从第一个节点开始,递归寻找其相邻节点,将每个节点的值和相邻节点信息都存进新节点中,并添加旧节点和新节点的关系即可
代码
class Solution {Map<Node, Node> map;public Node cloneGraph(Node node) {map = new HashMap<>();return dfs(node);}public Node dfs(Node node) {if (node == null) {return null;}if (map.get(node) != null) {return map.get(node);}Node newNode = new Node();newNode.val = node.val;map.put(node, newNode);List<Node> neighbors = node.neighbors;List<Node> newNeighbors = new ArrayList<>(neighbors.size());for (Node neighbor : neighbors) {newNeighbors.add(dfs(neighbor));}newNode.neighbors = newNeighbors;return map.get(node);}
}
关键点
- 深度优先遍历图的思想