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.













