打卡题目:leetcode第133题,克隆图

    image.png
    image.png
    image.png
    image.png
    image.png


    【代码】

    1. """
    2. # Definition for a Node.
    3. class Node:
    4. def __init__(self, val = 0, neighbors = None):
    5. self.val = val
    6. self.neighbors = neighbors if neighbors is not None else []
    7. """
    8. class Solution:
    9. def __init__(self):
    10. self.visited = {}
    11. def cloneGraph(self, node: 'Node') -> 'Node':
    12. if not node:
    13. return node
    14. # 如果该节点已经被访问了,则直接从哈希表中取出对应的克隆节点返回
    15. if node in self.visited:
    16. return self.visited[node]
    17. # 克隆节点,注意到为了深拷贝我们不会克隆它的邻居列表
    18. clone_node = Node(node.val, [])
    19. # 哈希表存储
    20. self.visited[node] = clone_node
    21. # 遍历该节点的邻居并更新克隆节点的邻居列表
    22. if node.neighbors:
    23. clone_node.neighbors = [self.cloneGraph(n) for n in node.neighbors]
    24. return clone_node