K [] preorden del árbol binario de búsqueda () método: el regreso genérica

votos
0

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.

Publicado el 30/10/2011 a las 21:33
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

La pregunta es: ¿Realmente necesita un número entero matriz devuelta? - Yo no lo creo.

Asumo que assertArrayEquals()no no comprobar el tipo de componente de las matrices, sino sólo compara los valores contenidos.

Con el código que mostró, yo diría que cualquier otra cosa no sería posible debido al tipo de borrado.

Así que trata de devolver un Object[]o lo que sea super-tipo se aplica en su caso:

return new Object[0];

y

return list.toArray();

(Moldes sin control necesarios, pero que deben estar bien)

EDITAR:

Ok, así <K extends Comparable>?
En ese caso de uso:

return new Comparable[0];

y

return (Comparable[])list.toArray(new Comparable[]);

Respondida el 30/10/2011 a las 22:00
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more