как заставить это двоичное дерево поиска работать ???(на Java) - PullRequest
0 голосов
/ 09 октября 2018
public void insert(int data) {
        if (root == null) root = new AVLNode(data);
        else {
            AVLNode node = root;
            while (node != null) {
                if (node.data <= data) {
                    node = node.right;
                }
                else {
                    node = node.left;
                }
            }
            node = new AVLNode(data);
        }
    }

Я пытаюсь создать двоичное дерево поиска (нерекурсивное), а затем получить доступ и выполнить предварительный обход, но когда я печатаю root, я получаю только 1 элемент.все вставки работают, я думаю, но тогда root просто имеет первую вставку в нем, и его левый и правый ничего не значат, я думаю, поэтому я получаю только 1 элемент.Как я могу сослаться корень на вершину дерева узлов?вот класс узла между прочим

class AVLNode
{
    AVLNode left, right;
    int data;

    /* Constructor */
    public AVLNode()
    {
        left = null;
        right = null;
        data = 0;
    }
    /* Constructor */
    public AVLNode(int n)
    {
        left = null;
        right = null;
        data = n;
    }
}

1 Ответ

0 голосов
/ 09 октября 2018

Проблема в обращении к переменным.Пока цикл повторяется до достижения нулевого значения в переменной node, а затем вы назначаете ему новый узел.Но нет никакой связи между родительской node.left или node.right и новой переменной node, потому что ей назначено значение null.Таким образом, вы присваиваете значение переменной, не связанной ни с чем, и оно будет потеряно.Вам необходимо назначить новые узлы непосредственно для node.left или node.right, как в этом примере:

public void insert(int data) {
   if (root == null) {
      root = new AVLNode(data);
   } else {
      AVLNode node = root;
      AVLNode newNode = new AVLNode(data);
      while (node != null) {
         if (node.data <= data) {
            if (node.right == null) {
               node.right = newNode;
               node = null;
            } else {
               node = node.right;
            }
         } else {
            if (node.left == null) {
               node.left = newNode;
               node = null;
            } else {
               node = node.left;
            }
         }
      }
   }
}
...