我目前正在开发一个在添加和删除值时显示堆的小程序。我将堆实现为整数树 - IntTrees。我正在为倾斜堆编写代码,而“添加”方法给我带来了一些麻烦。add 方法通常有效,但偶尔会在添加值时导致堆栈溢出错误,我似乎无法弄清楚原因。
这是我为 add 方法编写的代码
't' 是一个实例变量——堆本身。
// adds value to heap
public void add(int value) {
IntTree smallTree = new IntTree(value, empty(), empty());
if (t == null) {
t = smallTree;
} else {
t = merge(t, smallTree);
}
}
public IntTree merge(IntTree left, IntTree right) {
if (isEmpty(left)) return right;
if (isEmpty(right)) return left;
int leftVal = left.value();
int rightVal = right.value();
IntTree result;
if (rightVal <= leftVal) {
result = merge(right,left);
} else {
result = left;
if (result.isEmpty(left)) {
result.setLeft(right);
} else {
IntTree temp = result.right();
result.setRight(result.left());
result.setLeft(merge(temp,right));
}
}
return result;
}
这段代码中是否存在会导致堆栈溢出错误的内容,或者问题可能在程序的其他地方?谢谢!