Realizace Využití: datová struktura Lab Cvičení na říjen / 28/2011 Postup: Zavést strom binárního vyhledávání
Problém: K [] Návrat metody preorder (), nezbytného () a postorder ()
Problém Podrobnosti: BST musí mít pouze jeho kořen jako parametr. Výše uvedených metod byly popsány v rozhraní dané naším profesorem jako následující:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Mohl bych instanci generického pole s následující kód:
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 když jsem testoval metodu pomocí třídy testování také dodaný naší profesora, mám NullPointerException, Wich myslím, že se odkazuje na kořeni BST, který byl kdysi instance, ale byl odebrán v místě v testu , a když se opět volá metodu, tak se způsob vrátí null, ne prázdné pole, jak se očekávalo testem:
(...)
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());
(...)
S vědomím, že nemohu změnit návratový typ ani parametry způsobu, co mohu udělat, aby se zabránilo této výjimky? Mohu nějak dostat typu konstrukční části a použít jej k vytvoření instance prázdné pole (Jak to udělat?)?
Nějaké tipy, jak zlepšit svůj kód jsou také vítány.













