【发布时间】:2021-02-03 22:50:04
【问题描述】:
下面的代码展示了 leetcode 中的一个数据结构。我们可以看到 node1 存储了一个带有 node2 和 node3 的列表,node2 将存储了一个带有 node1 和 node4 的列表。在这种情况下,我认为 node1 和 node2 将存储彼此的对象,这将导致无限递归。 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;
}
}
public static void main(String[] args) {
Node node1 = new Node(1, new ArrayList<>());
Node node2 = new Node(2, new ArrayList<>());
Node node3 = new Node(3, new ArrayList<>());
Node node4 = new Node(4, new ArrayList<>());
node1.neighbors.add(node2);
node1.neighbors.add(node4);
node2.neighbors.add(node1);
node2.neighbors.add(node3);
node3.neighbors.add(node2);
node3.neighbors.add(node4);
node4.neighbors.add(node1);
node4.neighbors.add(node3);
Solution solution = new Solution();
solution.cloneGraph(node1);
}
【问题讨论】:
-
没有递归。
-
嗨@Jackie。我能理解这让你感到困惑。您的理解是正确的,每个对象都存储其他对象的对象。但请记住,存储对象发生在内存中。递归是一种计算技术。以某种方式存储数据并不意味着会有递归。进行一些计算时会发生递归。例如。在图遍历期间(在这种情况下),这将需要解决方案工程师处理递归可能进入无限循环的情况。你应该尝试解决一些图遍历问题来掌握它。
标签: java recursion data-structures