Как вставить узел в Treap с тремя аргументами - PullRequest
0 голосов
/ 03 ноября 2019

У меня проблемы с вставкой Treapnode в треп. Требуется 3 аргумента. добавить (клавиша E, приоритет P, Treapnode X). Я перепробовал много вещей и продолжаю получать исключение нулевого указателя.

Я попытался проверить нулевые случаи как в левом, так и в правом дереве.

private TreapNode add (E key, P priority, TreapNode x)
        throws ElementFoundException {

    // For You To Complete
    int compare = key.compareTo(x.element());
    if (x == null){
        return new TreapNode(key, priority);
    }

    //root is larger than the key

    else if (compare == 0) {
        throw new ElementFoundException("Element was found, and tree was not changed.");
    } else if (compare < 0) {
        if (x.left() == null) {
         //TreapNode y = new TreapNode(key, priority);
            TreapNode y = x.left;
            x.left = y.right;
            y.right = x;
            return y;
        } else {
            x.left = add(key, priority, x.left());
        }


    }
    //root is smaller than the key
    else if (compare > 0) {
        if (x.right() == null) {
            //TreapNode y = new TreapNode(key, priority);
            TreapNode z = x.right;
            x.right = z.left;
            z.left = x;
            return z;
        }

    }
    return x;
}

1 Ответ

0 голосов
/ 03 ноября 2019

это вы ошибаетесь с x.right(). То же самое относится и к x.left()

if (x.right() == null) {
        //TreapNode y = new TreapNode(key, priority);
        TreapNode z = x.right; // z = null
        x.right = z.left;  // z.left will throw NPE

должно быть

if (x.right() == null) {
   x.right() = new TreapNode(key, priority);
   return x; // return parent node 
}

также, я думаю, что это также неправильное сравнение, int не может быть null, ноInteger класс может быть

int compare = key.compareTo(x.element());  //comoareTo return an int 
if (x == null){  // does not make sense to compare and int type to Object type
  ....
}

для глубокого понимания прочитайте эту страницу https://www.geeksforgeeks.org/binary-search-tree-set-1-search-and-insertion/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...