K [] preorder binarne drzewo poszukiwań jest () metoda: o ogólnym zamian

głosy
0

Realizacja Zastosowanie: Struktura danych Exercise Lab na październik / 28/2011 do zrobienia: Wdrożenie binarne drzewo poszukiwań

Problem K [] Zwrot metody preorder () Inorder () i postOrder ()

Problem Szczegóły: BST musi mieć tylko swoje korzenie jako parametr. Powyższe metody są opisane w interfejsie danego naszego profesora jak:

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

Mógłbym instancję rodzajowy tablicę z następującym kodem:

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

Ale, gdy testowałem metodę przy użyciu klasy testowania również dostarczone przez naszego profesora, mam NullPointerException, wich myślę odnosi się do korzenia BST, który został raz instancja, ale zostały usunięte w momencie badania i kiedy ponownie wywołuje metody, metoda zwraca null, a nie pustą tablicę jako oczekiwany przez 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());

    (...)

Wiedząc, że nie mogę zmienić typ zwracanej ani parametrów metody, co mogę zrobić, aby uniknąć tego wyjątku? Czy mogę jakoś uzyskać typ komponentu i używać go do wystąpienia pustą tablicę (skąd ja to zrobić?)?

Wszelkie wskazówki do poprawy mojego kodu są również mile widziane.

Utwórz 30/10/2011 o 21:33
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Pytanie brzmi: Czy naprawdę trzeba się Integer tablicy zwróconej? - Nie sądzę.

Zakładam, że assertArrayEquals()ma nie sprawdzić typ składnikiem macierzy ale raczej porównuje tylko wartości zawartych.

Z kodem pokazałeś, powiedziałbym, niczego innego nie byłoby możliwe ze względu na typ skasowaniem.

Więc staram się zwracać Object[]lub cokolwiek super typ zastosowanie w przypadku:

return new Object[0];

i

return list.toArray();

(Niesprawdzone odlewy wymagane, ale to powinno być ok)

EDYTOWAĆ:

Ok, tak <K extends Comparable>?
W takim przypadku wykorzystania:

return new Comparable[0];

i

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

Odpowiedział 30/10/2011 o 22:00
źródło użytkownik

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