Note
I can still refactor my code. Can also solve via recursion DFS
"""
# 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 []
"""
class Solution:
def cloneGraph(self, node: 'Node') -> 'Node':
if not node:
return None
seenNodes = [None for _ in range(1, 102)]
stack = [node]
seen = set()
while stack:
for _ in range(len(stack)):
v = stack.pop()
seen.add(v)
if seenNodes[v.val] is None:
seenNodes[v.val] = Node(v.val)
for neighbor in v.neighbors:
if seenNodes[neighbor.val] is None:
seenNodes[neighbor.val] = Node(neighbor.val)
seenNodes[v.val].neighbors.append(seenNodes[neighbor.val])
if neighbor not in seen:
stack.append(neighbor)
seen.add(neighbor)
return seenNodes[node.val]