给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
本题主要考察dfs bfs 和哈希表的应用
class Node {
public int val;
public List<Node> neighbors;
}
方法一 库函数:
class Solution:
def cloneGraph(self, node: 'Node') -> 'Node':
import copy
return copy.deepcopy(node)
方法二 bfs:
class Solution:
class Solution:
def cloneGraph(self, node: 'Node') -> 'Node':
if not node:
return
pic, queue = {}, [node]
pic[node] = Node(node.val, [])
while queue:
a = queue.pop(0)
for i in a.neighbors:
if i not in pic:
pic[i] = Node(i.val, [])
queue.append(i)
pic[a].neighbors.append(pic[i])
return pic[node]
方法三 dfs
class Solution:
def cloneGraph(self, node: 'Node') -> 'Node':
if not node:
return
hash_map = {}
def dfs(root):
if not root:
return
if root in hash_map:
return hash_map[root]
ret = Node(root.val, [])
hash_map[root] = ret
for i in root.neighbors:
ret.neighbors.append(dfs(i))
return ret
return dfs(node)