1

我有一个包含人的 BinarySearchTree。每个人都有生日月份的财产。

如果人们的生日月份相同,我有以下代码试图将节点推送到堆栈中。但是当我运行程序时,它会抛出 java.lang.OutOfMemoryError: Java heap space。

如何获取具有相同生日月份的所有元素并将它们推送到堆栈?

编辑:基于工作代码的确定 KarlP 的回答

//Part of the code

//Declared in Instance Variables

private Stack<BinaryNode> st = new Stack<BinaryNode>();

//Methods

public void getSame(BinaryNode node, String mo){
    if(node != null){
        if (mo.equalsIgnoreCase(node.people.getBmonth())){
            st.push(node);
        }
        getSame(node.left, mo);
        getSame(node.right, mo);
    }
}

public void getSt(String mo){
    getSame(root, mo);
}
4

2 回答 2

3

您没有更新,node因此它将永远在循环内while循环。

我认为它可能应该用一个if语句替换,作为递归调用的停止条件。

于 2013-04-11T20:49:42.517 回答
1

递归算法总是需要某种 if。否则它只会继续下降。

if (we are done) {
    return(1);
} else {
    return recurse() + recurse();
}

在您的情况下,您想测试是否缺少子节点以结束递归。

使用它来结束递归:

if (node != null){
于 2013-04-11T20:53:05.943 回答