Implementación Uso: Estructura de datos Ejercicio práctico para octubre / 28/2011 A hacer: Implementar un árbol de búsqueda binaria
Problema: K [] retorno de métodos PREORDER (), a finde () y postorden ()
Problema Detalles: El BST sólo debe tener su raíz como parámetro. Los métodos mencionados anteriormente se han descrito en una interfaz dada por nuestro profesor como el siguiente:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Podría crear una instancia de la matriz genérica con el siguiente código:
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;
}
Pero, cuando probé el método que utiliza una clase de prueba también proporcionado por nuestro profesor, tengo una NullPointerException, wich creo que se está refiriendo a la raíz del BST, que ha sido una vez instanciado, pero se ha eliminado en un punto en la prueba y cuando se llama al método nuevo, el método devuelve un valor nulo, no una matriz vacía como era de esperar por la prueba:
(...)
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());
(...)
Sabiendo que no puedo cambiar el tipo de retorno, ni los parámetros del método, ¿qué puedo hacer para evitar esta excepción? ¿Hay algún modo de obtener el tipo de componentes y utilizarlo para crear una instancia de la matriz vacía (¿cómo puedo hacer esto?)?
¿Algún consejo para mejorar mi código también son bienvenidos.













