题目:
本题属于图这种数据结构的一个题目,可以通过深度优先遍历来求解。因为考虑到无向图,为了完成整张图的遍历,我们需要记录访问过得节点,以防止重复遍历,陷入死循环之中。
Java实现代码如下:
class Node {
public int val;
public List<Node> neighbors;
public Node() {
val = 0;
neighbors = new ArrayList<Node>();
}
public Node(int _val) {
val = _val;
neighbors = new ArrayList<Node>();
}
public Node(int _val, ArrayList<Node> _neighbors) {
val = _val;
neighbors = _neighbors;
}
}
class Solution {
public Node cloneGraph(Node node) {
return cloneGraphDg(node, new HashMap<>());
}
public Node cloneGraphDg(Node node, Map<Integer, Node> nodes) {
List<Node> neighbors = node.neighbors;
Node newNode = new Node();
newNode.val = node.val;
nodes.put(node.val, newNode);
for (Node i : neighbors) {
if (!nodes.containsKey(i.val)) {
newNode.neighbors.add(cloneGraphDg(i, nodes));
} else {
newNode.neighbors.add(nodes.get(i.val));
}
}
return newNode;
}
}