-2
これはバイナリ検索ツリーの検索と挿入のコードです。私は、関数Node12のinsert2(Node12 curr、int d)を繰り返すことでツリーの左右のノードをチェックしようとしています。 1行にランタイムエラーが表示されます。 助けてください私はバイナリ検索ツリーのコードを書いていました。しかし、以下のコードでjava.lang.StackOverflowErrorというエラーが1つ発生しています
class bst {
class Node12 {
Node12 left, right;
int data;
Node12(int d) {
data = d;
left = null;
right = null;
}
}
Node12 root;
bst() {
root = null;
}
void Search(int looking) {
Node12 current = root;
while (current != null) {
if (current.data == looking) {
System.out.println("Desirable print" + current.data);
} else if (current.data > looking) {
current = current.left;
} else {
current = current.right;
}
}
}
void insert(int d) {
root = insert2(root, d);
}
Node12 insert2(Node12 curr, int d) {
curr = root;
if (curr == null) {
curr = new Node12(d);
return curr;
}
if (curr.data > d) {
curr.left = insert2(curr.left, d);
} else if (curr.data < d) {
curr.right = insert2(curr.right, d);-----(Here i am getting error)
}
return curr;
}
void inorder2() {
inorder(root);
}
void inorder(Node12 current) {
current = root;
if (current != null) {
inorder(current.left);
System.out.println(current.data);
inorder(current.right);
}
}
public static void main(String... s) {
bst b1 = new bst();
b1.insert(10);
b1.insert(20);
b1.insert(30);
b1.insert(40);
b1.insert(50);
b1.insert(60);
b1.inorder2();
b1.Search(25);
}
}
その宿題に問題があります。だから私はBSTとその実装を理解しようとしています。
'insert2'は' curr'は 'null'なので場合にのみ停止する再帰的方法です。メソッドの先頭で 'curr'を' root'に設定しますが、 'root'の値をメソッド内で変更することは決してありません。つまり、' root'が 'null'でなければ、無限の再帰があります。 – Titus