图的遍历:133.克隆图

题目:133.客隆图

1、题目分析

克隆一张图,并且是深度拷贝;深度拷贝就是有新的引用,节点的关系和值都是一样的,只不过是每个节点的引用是不一样的。明天找机会重新复习一下深度和浅度拷贝。

2、解题分析

  • 初始话一个队列,将node添加到队列中去
  • 初始化一个hash表,key是节点,value是它的相邻节点
  • 进行BFS遍历
    • 如果邻居节点不在hash中,将新的节点添加到hash中
    • 如果邻居节点在hash中,就更新节点的邻居节点
  • 返回new的图结构,也就是图的深度拷贝了

3、代码

"""
# Definition for a Node.
class Node:
    def __init__(self, val = 0, neighbors = []):
        self.val = val
        self.neighbors = neighbors
"""

class Solution:
    def cloneGraph(self, node: 'Node') -> 'Node':
        if not node:
            return node
        
        queue = collections.deque()
        queue.append(node)
        res = {}
        res[node] = Node(node.val,[])
        while queue:
            n = queue.popleft()
            for neighbor in n.neighbors:

                if neighbor not in res:
                    res[neighbor] = Node(neighbor.val,[])
                    queue.append(neighbor)
                res[n].neighbors.append(res[neighbor])

        return res[node]
           

总结:题目的难度就在于理解什么是深度拷贝。

你可能感兴趣的:(Leetcode,图,数据结构,队列,java,leetcode)