如何在堆栈中推送具有相同内容的二进制搜索树的节点

时间:2013-04-11 20:43:42

标签: java

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

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

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

编辑:基于ok 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);
}

2 个答案:

答案 0 :(得分:3)

您没有更新node,因此它会在while循环中循环播放。

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

答案 1 :(得分:1)

递归算法总是需要某种if。否则就会继续下去。

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

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

使用它来结束递归:

if (node != null){