From 36611fddaafde8a9fd156e0a1a073da02a32940a Mon Sep 17 00:00:00 2001 From: izatwin Date: Fri, 10 May 2024 12:37:42 -0400 Subject: [PATCH] 133 clone graph --- medium/133 Clone Graph/solution.py | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 medium/133 Clone Graph/solution.py diff --git a/medium/133 Clone Graph/solution.py b/medium/133 Clone Graph/solution.py new file mode 100644 index 0000000..2ff70b7 --- /dev/null +++ b/medium/133 Clone Graph/solution.py @@ -0,0 +1,31 @@ + +# Definition for a Node. +class Node: + def __init__(self, val = 0, neighbors = None): + self.val = val + self.neighbors = neighbors if neighbors is not None else [] + + +from typing import Optional +from collections import deque + +class Solution: + def cloneGraph(self, node: Optional["Node"]) -> Optional["Node"]: + if not node: + return None + + graph_map = {} + q = deque() + q.append(node) + root = Node(node.val) + graph_map[node.val] = root + + while q: + cur_node = q.popleft() + for neighbor in cur_node.neighbors: + if neighbor.val not in graph_map: + graph_map[neighbor.val] = Node(val=neighbor.val) + q.append(neighbor) + graph_map[cur_node.val].neighbors.append(graph_map[neighbor.val]) + + return root \ No newline at end of file