philosyang.com

133. Clone Graph

 1"""
 2# Definition for a Node.
 3class 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
 9from typing import Optional
10
11
12class Solution:
13    def cloneGraph(self, node: Optional["Node"]) -> Optional["Node"]:
14        # idea: given values are unique, hashmap `values: cloned_node`
15
16        if not node:
17            return None
18
19        dq = deque([node])
20        clones = {node.val: Node(node.val, [])}
21
22        while dq:
23            original = dq.popleft()
24            clone = clones[original.val]
25            clone_nei = []
26
27            for nei in original.neighbors:
28                if nei.val not in clones:
29                    clones[nei.val] = Node(nei.val, [])
30                    dq.append(nei)
31                clone_nei.append(clones[nei.val])
32            clone.neighbors = clone_nei
33
34        return clones[node.val]

#Neetcode150 #Graph #Breadth-First-Search #Python