"""
# 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':
dic = {}
return self.helper(node, dic)
def helper(self, node, dic):
if node == None:
return None
if node in dic:
return dic[node]
clone = Node(node.val)
dic[node] = clone
for neighbor in node.neighbors:
clone.neighbors.append(self.helper(neighbor, dic))
return clone
"""
# 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':
# edge case
if node == None:
return None
dic = {}
queue = [node]
clone = Node(node.val)
dic[node] = clone # no any connections, independent start node
while len(queue) != 0:
node = queue.pop(0)
for neighbor in node.neighbors:
if neighbor not in dic:
dic[neighbor] = Node(neighbor.val)
queue.append(neighbor)
dic[node].neighbors.append(dic[neighbor])
return clone