Использование реализации: структуры данных Лабораторная работа Упражнение на октябрь / 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());
(...)
Зная, что я не могу изменить тип возвращаемого ни параметры метода, что я могу сделать, чтобы избежать этого исключения? Могу ли я каким-то образом получить тип компонента и использовать его для создания экземпляра пустого массива (я Как бы это сделать?)?
Любые советы по улучшению моего кода, также приветствуется.













