Bináris keresés Tree K [] Előrendelési () módszer: a generikus visszatérés

szavazat
0

Megvalósítás használat: adatstruktúra Laborfeladat október / 28/2011 Ehhez: Végre egy bináris keresési fa

Probléma: K [] visszatérése módszerek Előrendelés (), inorder () és postorder ()

Probléma Részletek: A BST kell csak a gyökér, mint a paraméter. A módszerek fent említett írtak le egy interfész által megadott mi professzor, mint a következő:

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

Tudtam példányosítunk generikus tömböt az alábbi kódot:

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

De amikor tesztelték a módszert a vizsgálati osztály is biztosítja a tanár, kaptam egy NullPointerException, wich azt hiszem utal a gyökér a BST, hogy már egyszer példányai, de már eltávolították egy pontján a vizsgálati és amikor meghívja a módszerrel újra, és az eljárás visszatér null, nem egy üres tömb által várt teszt:

    (...)

    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());

    (...)

Tudva, hogy nem tudok változtatni a visszatérési típusa, sem a paramétereket a módszer, hogy mit tehetek, hogy elkerülje ezt a kivétel? Tud én valahogy az alkatrész típusát és használja példányosításához az üres array (Hogy tudom ezt megtenni?)?

Bármilyen tipp, hogy javítsa a kód is fogadunk.

A kérdést 30/10/2011 21:33
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Kérdés: Valóban szükség van egy Integer visszaadott tömb? - Nem hiszem.

Gondolom assertArrayEquals()nem nem ellenőrzi a alkatrész a tömbök, hanem csak le a tárolt értékeket.

A kód azt mutatta, azt mondanám, semmi mást nem lenne lehetséges, mivel típusú törlést.

Így próbálja visszaadni Object[], vagy bármi szuper-típusú érvényes az Ön esetében:

return new Object[0];

és

return list.toArray();

(Bejelölve vet szükség, de ez rendben van)

EDIT:

Ok, így <K extends Comparable>?
Ebben az esetben a használatra:

return new Comparable[0];

és

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

Válaszolt 30/10/2011 22:00
a forrás felhasználó

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