我有一个包含人的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);
}
答案 0 :(得分:3)
您没有更新node
,因此它会在while
循环中循环播放。
我认为它可能应该用if
语句替换,作为递归调用的停止条件。
答案 1 :(得分:1)
递归算法总是需要某种if。否则就会继续下去。
if (we are done) {
return(1);
} else {
return recurse() + recurse();
}
在您的情况下,您希望测试缺少子节点以结束递归。
使用它来结束递归:
if (node != null){