133.克隆图

原题

一、dfs

class Solution:
    def cloneGraph(self, node: 'Node') -> 'Node':
        visited = {}	#hash存储已访问过的
        def dfs(node):
            if not node:	#防止空图用例
                return None
            if node in visited:		#防止重复访问,遇到访问过的节点,直接返回其拷贝
                return visited[node]
            nodeCpy = Node(node.val)	#拷贝node
            visited[node] = nodeCpy		#hash键为原图节点,值为拷贝节点
            for neighbor in node.neighbors:		#dfs处理node的邻居
                nodeCpy.neighbors.append(dfs(neighbor))
            return nodeCpy
        return dfs(node)

二、bfs

与dfs类似,还是将(原node,复制node)存储在hash中避免重复访问

最后更新于