

- 为了防止多次遍历同一个节点,陷入死循环,我们需要用一种数据结构记录已经被克隆过的节点。
dfs
class Solution {
Map<Node, Node> visited = new HashMap<>();
public Node cloneGraph(Node node) {
if (node == null) {
return null;
}
if (visited.containsKey(node)) {
return visited.get(node);
}
Node newNode = new Node(node.val, new ArrayList<>());
visited.put(node, newNode);
for (Node n : node.neighbors) {
newNode.neighbors.add(cloneGraph(n));
}
return newNode;
}
}
bfs
class Solution {
Map<Node, Node> visited = new HashMap<>();
public Node cloneGraph(Node node) {
if (node == null) {
return node;
}
Queue<Node> queue = new LinkedList<>();
queue.offer(node);
visited.put(node, new Node(node.val, new ArrayList<>()));
while (!queue.isEmpty()) {
Node n = queue.poll();
for (Node nb : n.neighbors) {
if (!visited.containsKey(nb)) {
visited.put(nb, new Node(nb.val, new ArrayList<>()));
queue.add(nb);
}
visited.get(n).neighbors.add(visited.get(nb));
}
}
return visited.get(node);
}
}