clone-graphV1.py (1221B)
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 9 from typing import Optional 10 11 12 class Solution: 13 def cloneGraph(self, node: Optional["Node"]) -> Optional["Node"]: 14 # this is a list of values 15 # and the corresponding values that it is adjacent to. 16 17 lookup = {} 18 dfs(node, lookup) 19 20 nodes = {} 21 22 for val in lookup: 23 nodes[val] = Node(val) 24 25 for val in nodes: 26 current_node = nodes[val] 27 for tail_edge in lookup[val]: 28 if current_node.neighbors is not None: 29 current_node.neighbors.append(nodes[tail_edge]) 30 else: 31 current_node.neighbors = [nodes[tail_edge]] 32 33 return nodes.get(1) 34 35 36 def dfs(current_node, lookup): 37 38 if current_node is None or current_node.val in lookup: 39 return None 40 41 lookup[current_node.val] = [] 42 43 if current_node.neighbors is None: 44 return 45 46 for neighbor in current_node.neighbors: 47 lookup[current_node.val].append(neighbor.val) 48 dfs(neighbor, lookup) 49 50 return