私は現在、値が追加および削除されたときにヒープを表示するアプレットに取り組んでいます。ヒープを整数のツリー(IntTrees)として実装しています。スキューヒープのコードを書いていますが、「add」メソッドを使用すると問題が発生します。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;
}
このコードにスタックオーバーフローエラーを引き起こす何かがありますか、それともプログラムの他の場所に問題がありますか?ありがとう!