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