TreeViolationException проблема - PullRequest
       8

TreeViolationException проблема

0 голосов
/ 12 апреля 2009

Привет У меня возникли проблемы при вставке справа от узла в двоичном дереве ... Я просто не понимаю, почему происходит исключение. Это метод для вставки:

public void attachRight(BinaryTree<T> tree) {
    if (right != null) {
        throw new TreeViolationException();

    }
    if (tree != null) {
        tree.parent = this;
        right = tree;
    }
}

Это код моего основного класса

тестирование в открытом классе {

public static void main(String[] args) {

    /*  the tree to be built                30
     *                                    /    \
     *                                  12     16
     *                                 /  \   /  \
     *                               null  1  2   5
     */

    //Create binary tree and set root to 30
    BinaryTree<Integer> root = new BinaryTree<Integer>();
    root.makeRoot(30);
    //System.out.println(root.getData()); //for verifying only

    //Insert 12 -> left(30)
    root.attachLeft(new BinaryTree<Integer>());
    root.left.setData(12);

    //Insert 16 -> right(30)
    root.attachRight(new BinaryTree<Integer>());
    root.right.setData(16);

    //insert 1 -> right(12)
    root.right.attachRight(new BinaryTree<Integer>());
    root.right.right.setData(1);

    //insert 2 -> left(16)
    root.right.attachLeft(new BinaryTree<Integer>());
    root.right.left.setData(2);

    //insert 5 -> right(16)
    root.right.attachRight(new BinaryTree<Integer>());
    root.right.right.setData(5);

    System.out.println(root.getData());
    System.out.println(root.left.getData());
    System.out.println(root.right.getData());

}

}

Я могу вставить только 30, 12 и 16. Не уверен, что происходит .... Это ошибка, которую я получаю, это происходит в методе attachRight

Исключение в потоке "main" proj5.TreeViolationException в proj5.BinaryTree.attachRight (BinaryTree.java:98)

TreeViolationException - это просто мой класс, который расширяет RuntimeException

1 Ответ

1 голос
/ 12 апреля 2009

Из предоставленной информации, исключение должно исходить из этой строки:

//insert 5 -> right(16)
root.right.attachRight(new BinaryTree<Integer>());

потому что root.right.attachRight () уже был вызван в этой строке:

//insert 1 -> right(12)
root.right.attachRight(new BinaryTree<Integer>());

и root.right уже имеет правый узел. Почему это происходит раньше, сейчас невозможно поставить диагноз. Вы должны предоставить больше информации (например, полная реализация класса BinaryTree).

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