我正在尝试遍历 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++;
}
}
}
它的作用是检查节点是内部节点还是叶节点的实例。如果它是一个内部节点,它会递归地调用它的每个子节点的函数。如果它是叶节点,那么它会将值添加到 ArrayList 中。然而,在运行这个功能时,我最终得到了一个java.lang.OutOfMemoryError
.
有没有办法让我的代码更有效率,或者我应该采取不同的方法来处理这种方法?