From 88b99caf11a0f9cbebe6d1039894e69acb4fc833 Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Wed, 10 Dec 2025 16:30:29 -0500 Subject: [PATCH] Time: 38 ms (85.56%), Space: 18.1 MB (81.8%) - LeetHub --- 0133-clone-graph/0133-clone-graph.py | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 0133-clone-graph/0133-clone-graph.py diff --git a/0133-clone-graph/0133-clone-graph.py b/0133-clone-graph/0133-clone-graph.py new file mode 100644 index 0000000..97ae55e --- /dev/null +++ b/0133-clone-graph/0133-clone-graph.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 node + + newHead = Node(node.val) + + frontier = deque([ node ]) + nodeMapping = { node.val: newHead } + while len(frontier) > 0: + current = frontier.popleft() + + for n in current.neighbors: + if n.val not in nodeMapping: + newNode = Node(n.val) + nodeMapping[newNode.val] = newNode + frontier.append(n) + nodeMapping[current.val].neighbors.append(nodeMapping[n.val]) + + return newHead +