Εφαρμογή Χρήση: Δομές Δεδομένων Εργαστήριο Άσκηση για τον Οκτώβριο / 28/2011 Για να κάνετε: Να εφαρμοστεί μια δυαδική αναζήτηση Δέντρο
Πρόβλημα: K [] επιστροφή των μεθόδων preorder (), Inorder () και postOrder ()
Πρόβλημα Λεπτομέρειες: Η BST πρέπει να έχει μόνο τη ρίζα του ως παράμετρο. Οι μέθοδοι που αναφέρθηκαν παραπάνω έχουν περιγραφεί σε μια διασύνδεση δίνεται από τον καθηγητή μας ως εξής:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Θα μπορούσα υπόσταση το γενικό πίνακα με τον ακόλουθο κώδικα:
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;
}
Αλλά, όταν δοκίμασα τη μέθοδο που χρησιμοποιεί μια κατηγορία δοκιμών που προβλέπονται και από τον καθηγητή μας, πήρα ένα NullPointerException, διασκορπισμένες νομίζω ότι αναφέρεται στη ρίζα του BST, που έχει για άλλη μια αρχικοποιείται, αλλά έχει αφαιρεθεί σε ένα σημείο στη δοκιμή , και όταν καλεί τη μέθοδο και πάλι, η μέθοδος επιστρέφει null, δεν έναν άδειο πίνακα όπως αναμένεται από τη δοκιμή:
(...)
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());
(...)
Γνωρίζοντας ότι δεν μπορώ να αλλάξετε τον τύπο επιστροφής ούτε τις παραμέτρους της μεθόδου, τι μπορώ να κάνω για να αποφευχθεί αυτή η εξαίρεση; Μπορώ με κάποιο τρόπο να πάρει την επικύρωση και να το χρησιμοποιήσετε για να υπόσταση το κενό πίνακα (Πως το κάνω αυτό;);
Κάθε συμβουλές για τη βελτίωση κωδικό μου είναι επίσης ευπρόσδεκτες.













