Implementierung verwendet: Laborübung Datenstruktur für Oktober / 28/2011 zu tun: Implementieren Sie einen binären Suchbaum
Problem: K [] Rückkehr von Methoden PREORDER (), inOrder () und postorder ()
Problem Details: Die BST muss nur seine Wurzel als Parameter haben. Die oben genannten Verfahren haben in einer Schnittstelle gegeben von unserem Professor wie folgt beschrieben:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Ich konnte das generische Array mit dem folgenden Code instanziiert:
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;
}
Aber, wenn ich die Methode getestet auch von unserem Professor bot eine Testklasse mit, i eine Nullpointer bekam, welche ich denke an die Wurzel des BST Bezug genommen wird, die einmal instanziiert wurde, wurde aber an einem Punkt in dem Test entfernt und wenn es das Verfahren wieder aufruft, gibt die Methode null, und kein leeres Array wie durch den Test zu erwarten:
(...)
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());
(...)
Zu wissen, dass ich nicht den Rückgabetyp noch die Parameter des Verfahrens ändern kann, was kann ich tun, um diese Ausnahme zu vermeiden? Kann ich den Komponententyp erhalten irgendwie und es verwenden, das leere Array zu instanziiert (wie würde ich das tun?)?
Irgendwelche Tipps meinen Code zu verbessern, sind ebenfalls willkommen.













