K [] PREORDER бинарного дерева поиска (в) метод: об общей доходности

голоса
0

Использование реализации: структуры данных Лабораторная работа Упражнение на октябрь / 28/2011 Для: Реализовать бинарное дерево поиска

Проблема: К [] возврат методов Preorder (), заказовМои () и postOrder ()

Проблема Деталь: BST должен иметь только его корень в качестве параметра. Методы выше были описаны в интерфейсе данного нашего профессора как следующее:

    /**
    * Returns an array of keys filled according
    * to the pre-order traversing in a BST.  
    */      
    public K[] preOrder();      
    public K[] order();         
    public K[] postOrder();

Я мог бы создать экземпляр общий массив со следующим кодом:

public K[] preOrder() {

    if (root == null) { return null; }

    ArrayList<K> list = new ArrayList<K>();
    preOrderRecursive(root,list);
    K[] toReturn = (K[]) Array.newInstance(this.getRoot().getKey().getClass(), list.size());

    for (int i = 0; i < list.size(); i++) {
        toReturn[i] = list.get(i);
    }

    return toReturn;
}

Но, когда я тестировал метод, используя класс тестирования также при условии нашего профессора, я получил NullPointerException, которым я думаю, что имеет в виду корень BST, который был когда-то реализованным, но был удален в точке в тесте и когда он снова вызывает метод, метод возвращает нуль, а не пустой массив, как ожидается, с помощью теста:

    (...)

    tree1 = new BSTImpl<Integer, Integer>();
    for (int i = 0; i < SIZE; i++) {
        tree1.insert(i, i);
    }
    tree1.remove(1);
    tree1.remove(2);
    tree1.remove(3);
    tree1.remove(4);
    assertArrayEquals(new Integer[]{},tree1.preOrder());

    (...)

Зная, что я не могу изменить тип возвращаемого ни параметры метода, что я могу сделать, чтобы избежать этого исключения? Могу ли я каким-то образом получить тип компонента и использовать его для создания экземпляра пустого массива (я Как бы это сделать?)?

Любые советы по улучшению моего кода, также приветствуется.

Задан 30/10/2011 в 21:33
источник пользователем
На других языках...                            


1 ответов

голоса
0

Вопрос в том: Вы действительно нужно в Integer массив , возвращаемый? - Я так не думаю.

Я предполагаю , что assertArrayEquals()это не проверяет тип компонента массивов, а только сравнивает содержащиеся значения.

С кодом, который вы показали, я бы сказал что-нибудь еще было бы невозможно из-за типа стирания.

Поэтому постарайтесь , чтобы возвращать Object[]или что - то супер-типа применяется в вашем случае:

return new Object[0];

а также

return list.toArray();

(Требуется непроверенные забросы, но это должно быть в порядке)

РЕДАКТИРОВАТЬ:

Хорошо, так <K extends Comparable>?
В этом случае использование:

return new Comparable[0];

а также

return (Comparable[])list.toArray(new Comparable[]);

Ответил 30/10/2011 в 22:00
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more