面试150 克隆图
思路
调库法,python可以直接使用copy.deepcopy函数进行深拷贝。此外就是通过一个哈希表 d 记录原节点与其克隆节点的映射关系,防止重复克隆和处理图中的环。首先判断起始节点是否为空,若非空则从起点开始递归遍历。每访问一个未被克隆的节点时,创建其副本并存入字典,然后递归克隆其所有邻居节点,构建邻接关系。最终返回起始节点的克隆副本,即为整个图的深拷贝。
"""
# Definition for a Node.
class Node:def __init__(self, val = 0, neighbors = None):self.val = valself.neighbors = neighbors if neighbors is not None else []
"""from typing import Optional
class Solution:def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:return copy.deepcopy(node)
"""
# Definition for a Node.
class Node:def __init__(self, val = 0, neighbors = None):self.val = valself.neighbors = neighbors if neighbors is not None else []
"""from typing import Optional
class Solution:def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:if not node:return None d={}def dfs(old):if old not in d:node=Node(old.val)d[old]=nodenode.neighbors=[dfs(nei) for nei in old.neighbors]return d[old]return dfs(node)