Uygulama Kullanım: Ekim Veri Yapısı Laboratuarı Egzersiz / 28/2011 yapmak için: a İkili Arama Ağacı Uygulamak
Sorun: Yöntemler ön sipariş edin K [] dönüş (), Inorder () ve postorder ()
Sorun Detayları: BST sadece bir parametre olarak kendi kök olması gerekir. Yukarıda bahsedilen yöntem aşağıdaki gibi profesörü tarafından verilen bir arabirim olarak tarif edilmiştir:
/**
* Returns an array of keys filled according
* to the pre-order traversing in a BST.
*/
public K[] preOrder();
public K[] order();
public K[] postOrder();
Aşağıdaki kod ile jenerik dizi örneğini verebilir:
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;
}
Ama, ben de bizim profesör tarafından sağlanan bir test sınıfını kullanarak yöntemi test edildiğinde, ben bir NullPointerException var ben bir kez örneği olmuştur BST köküne bahsediyor düşünüyorum, ama testte noktada kaldırıldı wich tekrar yöntemini çağırdığında, ve yönteminin, beklendiği gibi boş değil, boş bir dizi döner:
(...)
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());
(...)
ben bu İstisna önlemek için ne yapabilirim, ben dönüş türü ne de yöntemin parametrelerini değiştiremez bilerek? i nasılsa bileşen türü almak ve (nasıl geçti i? bunu) boş dizi örneğini kullanabilir miyim?
Benim kod geliştirmek için herhangi bir ipucu de açıktır.













