K [] precomanda a binar de căutare Tree () metoda: despre revenirea generică

voturi
0

Implementare Utilizare: Date Structura de laborator Exercitarea pentru luna octombrie / 28/2011, pentru a face: Punerea în aplicare a unui arbore binar de căutare

Problemă: K [] întoarcerea metodelor prin precomandă (), inordine () și postordine ()

Problemă Detalii: BST trebuie să aibă doar rădăcină ca parametru. Metodele de mai sus menționate au fost descrise într-o interfață dată de profesorul nostru ca următoarele:

    /**
    * Returns an array of keys filled according
    * to the pre-order traversing in a BST.  
    */      
    public K[] preOrder();      
    public K[] order();         
    public K[] postOrder();

Aș putea instantia matrice generic cu următorul cod:

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;
}

Dar, când am testat metoda folosind o clasă de testare, de asemenea, furnizate de profesorul nostru, am primit un NullPointerException, Wich cred că se referă la rădăcina BST, care a fost odată instanțiat, dar a fost eliminat într-un punct în testul și când solicită din nou metoda, metoda returneaza null, nu un array gol cum era de așteptat de 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());

    (...)

Știind că nu se poate schimba tipul de întoarcere și nici parametrii metodei, ce pot face pentru a evita această excepție? Pot cumva obține tipul de componente și să-l utilizați pentru a instantia matrice gol (Cum m-am face acest lucru?)?

Orice sfaturi pentru a îmbunătăți codul meu sunt de asemenea binevenite.

Întrebat 30/10/2011 la 21:33
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Întrebarea este: Chiar ai nevoie de un Integer matrice a revenit? - Eu nu cred acest lucru.

Presupun assertArrayEquals()nu nu verifica tipul componentei matricelor , ci mai degrabă se compară numai valorile conținute.

Cu codul pe care a arătat, aș spune nimic altceva nu ar fi posibil, în funcție de tipul de ștergere.

Deci , încercați să se întoarcă o Object[]sau orice super-tip se aplică în cazul dumneavoastră:

return new Object[0];

și

return list.toArray();

(Mulaje neverificate necesară, dar că ar trebui să fie ok)

EDITAȚI | ×:

Ok, deci <K extends Comparable>?
În acest caz de utilizare:

return new Comparable[0];

și

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

Publicat 30/10/2011 la 22:00
sursa de către utilizator

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