Given a reference of a node in a connected undirected graph, return a deep copy (clone) of the graph. Each node in the graph contains a val (int
) and a list (List[Node]
) of its neighbors.
Example:
这道题是克隆图,也是典型的DFS和BFS,由于DFS要涉及到递归,不太敢用,所以用BFS写的
即把先把一个点存进队列中,出队,判断其相邻的点,如果这边点在map中,就代表已经新建过了,只需要加到相邻的点,如果不在map中,需要新添到map中
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, neighbors):
self.val = val
self.neighbors = neighbors
"""
class Solution:
def cloneGraph(self, node):
if node == None: return None
queue = []; map = {}
newhead = Node(node.val,[])
queue.append(node)
map[node] = newhead
while queue:
curr = queue.pop()
for neighbor in curr.neighbors:
if neighbor not in map:
copy = Node(neighbor.val,[])
map[curr].neighbors.append(copy)
map[neighbor] = copy
queue.append(neighbor)
else:
map[curr].neighbors.append(map[neighbor])
return newhead