Я попытался написать рекурсивную функцию для добавления узлов в двоичное дерево.
Проблема заключается в том, что, хотя корень имеет новое значение после вставки первого элемента
(подтвержденным System.out.println()), он по-прежнему равен нулю, когда я пытаюсь получить значение корня в главной системе .out.println();Binary Tree insert root always null
package polo;
public class BTNode {
public int value;
public BTNode left;
public BTNode right;
BTNode(int value){
this.value = value;
left = null;
right = null;
}
}
package polo;
public class Tree {
public BTNode root;
public Tree() {
root = null;
}
public void add(int i, BTNode n) {
if (n == null) {
n = new BTNode(i);
System.out.println("New root value : " + n.value);
} else {
if (i < n.value) {
if (n.left == null) {
n.left = new BTNode(i);
} else {
add(i, n.left);
}
} else { // i >= n.value
if (n.right == null) {
n.right = new BTNode(i);
} else {
add(i, n.right);
}
}
}
}
public static void main(String[] args) {
Tree t = new Tree();
t.add(3, t.root);
System.out.println(t.root.value);
}
}
Выход командной строки:
Новый корень значение: 3
Исключение в потоке "основного" java.lang.NullPointerException в поло. Tree.main (Tree.java:57)
(строка 57 - это где System.out.println (t.root.value); стенды)
Извините, но я не понимаю ваш комментарий. Корень является нулевым, когда нет элемента, но после вставки нового (root = new Node()) он не должен быть пустым? –
@HovercraftFullOfEels Это не распространенный смысл, если вы не понимаете, как Java передает параметры функциям (есть «n = ...», которые могут показаться измененными «root»). – Dukeling
В стороне: создайте это дерево таким образом, чтобы вызывающий только когда-либо передавал значение, которое они хотели бы добавить к нему. Не позволяйте им ничего знать о структуре внутренних узлов. – Makoto