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

Java 如何在堆栈中推送具有相同内容的二叉搜索树节点,java,Java,我有一个包含人的BinarySearchTree。每个人都有一个生日月的财产 我有以下代码试图将节点推送到堆栈中,如果这些人的生日月份相同。但是当我运行程序时,它抛出一个java.lang.OutOfMemoryError:java堆空间 如何获取所有具有相同生日月份的元素并将它们推到堆栈中 编辑:基于ok KarlP答案的工作代码 //Part of the code //Declared in Instance Variables private Stack<BinaryNode&

我有一个包含人的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);
}
//代码的一部分
//在实例变量中声明
私有堆栈st=新堆栈();
//方法
public void getSame(BinaryNode节点,字符串mo){
如果(节点!=null){
if(mo.equalsIgnoreCase(node.people.getbmmonth()){
st.push(节点);
}
getSame(node.left,mo);
getSame(node.right,mo);
}
}
公共void getSt(字符串mo){
getSame(根,mo);
}

您没有更新
节点
,因此它将在
循环中永远循环


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

您没有更新
节点
,因此它将永远在
while
循环中循环


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

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

if (we are done) {
    return(1);
} else {
    return recurse() + recurse();
}
在您的例子中,您希望测试是否缺少子节点来结束递归

使用此选项结束递归:

if (node != null){

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

if (we are done) {
    return(1);
} else {
    return recurse() + recurse();
}
在您的例子中,您希望测试是否缺少子节点来结束递归

使用此选项结束递归:

if (node != null){

因此,将while替换为if?Yes。只要条件为true,while语句就会重复执行代码。if语句只执行代码一次。非常感谢。我用正确的解决方案编辑了我的问题。因此,将while替换为if?Yes。只要条件为true,while语句就会重复执行代码。if语句只执行代码一次。非常感谢。我用正确的答案编辑了我的问题。