Я пытаюсь написать BST с рекурсивным методом Insert, но мне показалось, что я застрял на строке, где программа не выпрыгивает.
Это работает, если ключи элементов отсортированы во время вызовавставить из Main, он не работает, если они не отсортированы, и я не могу понять, почему.
public static void main(String[] args) {
BST bst = new BST();
bst.insert(2,"Val_0");
bst.insert(1,"Val_1");
}
public class BSTNode {
public int key;
public String val;
public BSTNode left, right, parent;
public BSTNode(int key, String val) {
this.key = key;
this.val = val;
this.left = new BSTNode();
this.right = new BSTNode();
this.parent = new BSTNode();
}
public BSTNode() {
// TODO Auto-generated constructor stub
}
}
public class BST {
private BSTNode root;
public BST() {
this.root = null;
}
public void insert(int key, String val) {
root = insertRec(new BSTNode(key,val));
}
private BSTNode insertRec(BSTNode node) {
if (root == null) {
root = node;
return root;
}
if (node.key < root.key) {
root.left = insertRec(root.left);
root.left.parent = root;
}if( node.key > root.key) {
root.right = insertRec(root.right);
root.left.parent = root;
}
return node;
}
}
Ошибка: исключение в потоке "main" java.lang.StackOverflowError, отладчик показывает цикл в файле node.key