Java 尝试从B+添加元素时发生OutOfMemoryError;从树到阵列列表

Java 尝试从B+添加元素时发生OutOfMemoryError;从树到阵列列表,java,recursion,tree-traversal,b-tree,b-plus-tree,Java,Recursion,Tree Traversal,B Tree,B Plus Tree,我试图遍历B+树,并使用以下代码将树叶中的元素添加到ArrayList中: public void toArrayList(Node node){ Node currentNode = node; if(currentNode instanceof InnerNode){ InnerNode inner = (InnerNode) currentNode; int i = 0;

我试图遍历B+树,并使用以下代码将树叶中的元素添加到ArrayList中:

public void toArrayList(Node node){
       Node currentNode = node;
       if(currentNode instanceof InnerNode){
               InnerNode inner = (InnerNode) currentNode;
               int i = 0;
               int temp = inner.children.length;
               while(i < temp){
                   currentNode = inner.children[i];
                   toArrayList(currentNode);
                   i++;
               }


           }
       if(currentNode instanceof LeafNode){
               LeafNode leaf = (LeafNode) currentNode;
               int j = 0;
               int temp = leaf.values.length;
               while(j < temp){
                   if(leaf.values[j] != null) {
                       retArray.add(leaf.values[j]);
                   }
                   j++;
               }

           }
    }
public void to ArrayList(节点){
节点当前节点=节点;
if(InnerNode的currentNode实例){
InnerNode内部=(InnerNode)currentNode;
int i=0;
int temp=内部.children.length;
while(i
它所做的是检查节点是内部节点还是叶节点的实例。如果它是一个内部节点,它将递归调用该函数及其每个子节点。如果它是叶节点,则会将值添加到ArrayList中。然而,在运行此功能时,我最终得到一个
java.lang.OutOfMemoryError


有什么方法可以提高我的代码的效率,或者我应该采取另一种方法来使用这种方法吗?

除非您的树结构中有几百万个元素,否则这里发生的事情是一些内部代码包含了它自己,因此这种代码会一直运行下去,或者至少直到您的
重新排列
填满为止

还请注意,如果叶节点是内部节点的最后一个子节点,则此代码将添加两次叶节点。我强烈建议你不要这样覆盖本地人。此外,for循环在这里更紧凑(请注意,使代码更小并不会对内存问题产生任何影响;OOMError指的是堆,而局部变量并不存在)