Realizacja Zastosowanie: Struktura danych Exercise Lab na październik / 28/2011 do zrobienia: Wdrożenie binarne drzewo poszukiwań
Problem K [] Zwrot metody preorder () Inorder () i postOrder ()
Problem Szczegóły: BST musi mieć tylko swoje korzenie jako parametr. Powyższe metody są opisane w interfejsie danego naszego profesora jak:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Mógłbym instancję rodzajowy tablicę z następującym kodem:
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;
}
Ale, gdy testowałem metodę przy użyciu klasy testowania również dostarczone przez naszego profesora, mam NullPointerException, wich myślę odnosi się do korzenia BST, który został raz instancja, ale zostały usunięte w momencie badania i kiedy ponownie wywołuje metody, metoda zwraca null, a nie pustą tablicę jako oczekiwany przez test:
(...)
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());
(...)
Wiedząc, że nie mogę zmienić typ zwracanej ani parametrów metody, co mogę zrobić, aby uniknąć tego wyjątku? Czy mogę jakoś uzyskać typ komponentu i używać go do wystąpienia pustą tablicę (skąd ja to zrobić?)?
Wszelkie wskazówki do poprawy mojego kodu są również mile widziane.













