133_克隆图
难度:中等
题目
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val (int) 和其邻居的列表(list[Node])。
1 | |
示例

提示
- 节点数不超过 100 。
- 每个节点值 Node.val 都是唯一的,1 <= Node.val <= 100。
- 无向图是一个简单图,这意味着图中没有重复的边,也没有自环。
- 由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
- 图是连通图,你可以从给定节点访问到所有节点。
解题
使用深度优先搜索的方式进行拷贝,为了防止重复添加同一个节点,用 HashMap 来存储,key 为节点,value 为深拷贝的节点。
- 从给定节点开始遍历图。如果某个节点已经被访问过,则返回其克隆图中的对应节点
- 如果当前访问的节点不在哈希表中,则创建它的克隆节点并存储在哈希表中
- 递归调用每个节点的邻接点。每个节点递归调用的次数等于邻接点的数量,每一次调用返回其对应邻接点的克隆节点,最终返回这些克隆邻接点的列表,将其放入对应克隆节点的邻接表中
1 | |