Binary Search Tree's K [] preorder () methode: over de generieke return

stemmen
0

Implementatie Gebruik: Data Structure Lab Exercise voor oktober / 28/2011 Om dit te doen: Implementeer een binaire zoekboom

Probleem: K [] mits methoden preorder (), inorder () en Postorder ()

Probleem Bijzonderheden: De BST moet alleen zijn wortel als een parameter. De werkwijzen hierboven vermelde zijn beschreven in een interface gegeven door onze professor als volgt:

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

Ik kon een instantie van de generieke array met de volgende code:

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

Maar, toen ik de methode getest met een test klasse ook door onze professor, ik kreeg een nullPointerException, pacht ik denk dat verwijst naar de wortel van de BST, die eenmaal is geïnstantieerd, maar is op een punt in de test verwijderd , en wanneer het de methode weer belt, retourneert de methode null, niet een lege array zoals verwacht door 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());

    (...)

Wetende dat ik het type terugkeer noch de parameters van de methode niet kan veranderen, wat kan ik doen om deze uitzondering te vermijden? Kan ik een of andere manier het type component en gebruik deze om de lege array instantiëren (hoe zou ik dit doen?)?

Eventuele tips om mijn code te verbeteren zijn ook welkom.

De vraag is gesteld op 30/10/2011 om 21:33
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

De vraag is: Heb je echt nodig hebt een Integer serie terug? - Ik denk het niet.

Ik neem assertArrayEquals()doet niet controleer het componenttype van de arrays maar vergelijkt alleen inhoudwaarden.

Met de code die u toonde, zou ik zeggen iets anders niet mogelijk zou zijn als gevolg van het type wissen.

Dus proberen om terug te keren een Object[]of wat dan ook super-type past in uw geval:

return new Object[0];

en

return list.toArray();

(Ongecontroleerd afgietsels nodig, maar dat zou ok moeten zijn)

BEWERK:

Ok, dus <K extends Comparable>?
In dat geval gebruik:

return new Comparable[0];

en

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

antwoordde op 30/10/2011 om 22:00
bron van user

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