题目:
题解
深度优先:
class Solution {
Node[] visited = new Node[100];
public Node cloneGraph(Node node) {
if (node == null) {
return null;
}
Node clone = new Node();
dfs(node, clone);
return clone;
}
public void dfs(Node node, Node clone) {
clone.val = node.val;
visited[node.val - 1] = clone;
for (Node neighbor : node.neighbors) {
if (visited[neighbor.val - 1] == null) {
visited[neighbor.val - 1] = new Node();
dfs(neighbor, visited[neighbor.val - 1]);
}
clone.neighbors.add(visited[neighbor.val - 1]);
}
}
}
广度优先:
class Solution {
Node[] visited = new Node[100];
public Node cloneGraph(Node node) {
if (node == null) {
return null;
}
Queue<Node> queue = new LinkedList<>();
queue.add(node);
visited[node.val - 1] = new Node();
while (!queue.isEmpty()) {
Node poll = queue.poll();
visited[poll.val - 1].val = poll.val;
for (Node neighbor : poll.neighbors) {
if (visited[neighbor.val - 1] == null) {
visited[neighbor.val - 1] = new Node();
queue.add(neighbor);
}
visited[poll.val - 1].neighbors.add(visited[neighbor.val - 1]);
}
}
return visited[node.val - 1];
}
}