题目

给你无向连通图中一个节点的引用,请你返回该图的深拷贝(克隆)。
图中的每个节点都包含它的值val和其邻居的列表(list[Node])。

  1. class Node {
  2. public int val;
  3. public List<Mode> neighbors;
  4. }

思路

利用dfs遍历一遍每个节点相邻的节点。

  1. """
  2. # Definition for a Node.
  3. class Node(object):
  4. def __init__(self, val, neighbors):
  5. self.val = val
  6. self.neighbors = neighbors
  7. """
  8. class Solution(object):
  9. def __init__(self):
  10. # Dictionary to save the visited node and it's respective clone
  11. # as key and value respectively. This helps to avoid cycles.
  12. self.visited = {}
  13. def cloneGraph(self, node):
  14. """
  15. :type node: Node
  16. :rtype: Node
  17. """
  18. if not node:
  19. return node
  20. if node in self.visited:
  21. return self.visited[node]
  22. clone_node = Node(node.val, [])
  23. self.visited[node] = clone_node
  24. if node.neighbors:
  25. clone_node.neighbors = [self.cloneGraph(n) for n in node.neighbors]
  26. return clone_node