Корень всегда равен нулю.Рекурсивный BST Вставка не задает корневую Java
Это не домашнее задание, просто попытка расширить мои знания. Я пытаюсь рекурсивно вставлять узлы в двоичное дерево. Я сделал несколько поисков здесь, но каждая реализация настолько отличается, эти изменения не работают.
Это мой BinaryTree класс:
public class BinaryTree {
static Node root;
public static void insertNode(int data){
if(root != null){
root.printData();
insertNew(root, new Node(data));
}else{
root = insertNew(root, new Node(data));
}
}
private static Node insertNew(Node current, Node n){
if(current == null){
return n;
}else if(current.data > n.data){
current.left = insertNew(current.left, n);
return current;
}else if(current.data < n.data){
current.right = insertNew(current.right, n);
return current;
}
return current;
}
public static void main(String[] args){
insertNode(9);
}
}
И это мой узел:
class Node {
int data;
Node left;
Node right;
Node(int data){
this.data = data;
}
public int printData(){
System.out.println(this.data);
return this.data;
}
}
Каждый раз, когда я запускаю это, он предполагает, что корень нуль. У меня есть отладочные строки печати в рабочем коде, поэтому я могу указать, где я нахожусь в методах. Он поражает первый if
в функции insertNew()
каждый раз.
Я хотел бы концептуально понять, где я терплю неудачу.
@ChiefTwoPencils Это больше ради знаний, чем все остальное. Я делаю чек, чтобы гарантировать, что значение 'root' имеет значение. Вот почему это убивает меня, чего никогда не бывает. После первого вызова 'insertNode()', 'root' всегда должен иметь значение. – Phoenix
@Phoenix Это работает, когда я запускаю его. Однако вам нужно вставить другой узел, прежде чем root не будет «null». Например, добавьте 'insertNode (10)' к вашему основному методу. Java не сохраняет значения или структуры данных между циклами. – River
Это действительно работает ... – ChiefTwoPencils