Implementazione Uso: Dati Struttura Esercizio Lab per ottobre / 28/2011 Per fare: implementare un binario Ricerca albero
Problema: K [] ritorno dei metodi preorder (), inOrder () e postorder ()
Problema Dettagli: La BST deve avere solo la sua radice come parametro. I metodi sopra menzionati sono stati descritti in un'interfaccia proposta dal nostro professore come segue:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Ho potuto istanziare l'array generico con il seguente codice:
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;
}
Ma, quando ho provato il metodo che utilizza una classe di prova fornita anche dal nostro professore, ho un NullPointerException, wich Credo si riferisce alla radice del BST, che è stato una volta istanziata, ma è stato rimosso in un punto nel test , e quando chiama di nuovo il metodo, il metodo restituisce null, non un array vuoto come previsto dal 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());
(...)
Sapendo che non posso cambiare il tipo di ritorno, né i parametri del metodo, che cosa posso fare per evitare questa eccezione? Posso in qualche modo ottenere il tipo di componente e utilizzarlo per creare un'istanza della matrice vuota (Come ho fatto fare questo?)?
Eventuali suggerimenti per migliorare il mio codice sono i benvenuti.













