133. Clone Graph
![17368230-37edac7cc3235e90.png](https://i-blog.csdnimg.cn/blog_migrate/45c5dc0de01d78a7ab37fa8414568c67.webp?x-image-process=image/format,png)
![17368230-4822cb2fc0390032.png](https://i-blog.csdnimg.cn/blog_migrate/190cb1362f1b70065d94847b9a49d8d3.webp?x-image-process=image/format,png)
133. Clone Graph
BFS
需要用一个字典,记录原始节点和复制节点的对应关系。
- 队列里放原始节点
- 如果不在字典中,需要把节点放入队列
代码如下:
循环版本
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, neighbors):
self.val = val
self.neighbors = neighbors
"""
class Solution(object):
def cloneGraph(self, node):
"""
:type node: Node
:rtype: Node
"""
if node == None:
return None
memo = {}
qu = [node]
res = Node(node.val, [])
memo[node] = res
while qu:
node = qu.pop(0)
for i in node.neighbors:
if i not in memo:
p = Node(i.val, [])
memo[i] = p
qu.append(i)
memo[node].neighbors.append(memo[i])
return res
再来一个递归版本
class Solution(object):
def cloneGraph(self, node):
"""
:type node: Node
:rtype: Node
"""
self.memo = {}
return self.clone(node)
def clone(self, node):
if node == None:
return None
if node in self.memo:
return self.memo[node]
p = Node(node.val, [])
self.memo[node] = p
for i in node.neighbors:
p.neighbors.append(self.clone(i))
return p