133. Clone Graph

https://leetcode.com/problems/clone-graph/

solution

  • bfs

class Solution:
    def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:
        if not node:
            return node

        node_dict = {}
        node_dict[node.val] = Node(node.val)  # 遍历copy时,快速定位已有Node, 用于neighbor关系。顺便记录了已遍历过的
        queue = collections.deque([node])

        while queue:
            cur = queue.popleft()  # 注意这里不能和node重名, 用于最后输出

            for neighbour in cur.neighbors:
                if neighbour.val not in node_dict:
                    node_dict[neighbour.val] = Node(neighbour.val)
                    queue.append(neighbour)  # 注意: 放在if里避免了重复遍历相同,因此没有创建额外的visited

                # 这里每次append, 而不是一个层之后 neighbor=clone_neighbor
                node_dict[cur.val].neighbors.append(node_dict[neighbour.val])

        return node_dict[node.val]

时间复杂度:O(V+E) 空间复杂度:O(V+E)

  • dfs

follow up

138. Copy List with Random Pointer

时间复杂度:O(n) 空间复杂度:O(n)

  • 不使用hashmap, O(1)空间复杂度

1490. Clone N-ary Tree

1485 Clone Binary Tree With Random Pointer

Last updated