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