Gjennomføring Bruk: Data Structure Lab Øvelse for oktober / 28/2011 For å gjøre: Implementere et binært søketre
Problem: K [] retur av metoder preorder (), inorder () og Postorder ()
Problem Detaljer: BST må bare ha sin rot som en parameter. Metodene ovenfor nevnt er blitt beskrevet i et grensesnitt gitt ved vår professor som følgende:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Jeg kunne instantiate den generiske array med følgende kode:
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;
}
Men, når jeg testet metoden ved hjelp av en test klasse også levert av vår professor, jeg fikk en NullPointerException, wich jeg tror refererer til roten av BST, som har vært en gang startes, men har blitt fjernet på et punkt i testen og når den kaller metoden igjen, returnerer fremgangsmåten null, ikke en tom matrise som forventet av testen:
(...)
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());
(...)
Å vite at jeg ikke kan endre returtypen eller parametrene av metoden, hva kan jeg gjøre for å unngå dette unntaket? Kan jeg liksom få komponenttypen og bruke den på å bruke den tomme array (hvordan gikk jeg gjøre dette?)?
Noen tips for å forbedre koden min er også velkomne.













