我目前正在研究一個applet,它會在添加和刪除值時顯示一個堆。我正在實施堆整數樹 - IntTrees。我正在編寫偏斜堆的代碼,'add'方法給我帶來一些麻煩。 add方法通常起作用,但是偶爾會在添加值時導致堆棧溢出錯誤,而我似乎無法找出原因。StackOverflowError - 將值添加到堆
下面是我爲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;
}
在這段代碼中是否會引起堆棧溢出錯誤,或者是程序中其他地方的問題?謝謝!
謝謝。這是一個簡單的修復。 – meerkat 2010-11-03 02:30:23