0
我一直在使用驅動程序來測試我的一個數據結構(二叉搜索樹) 和我遇到過這個問題。 - 當我向bst插入2個以上的對象時發生 - 我試圖做的是:我將4個對象插入樹中,然後刪除2個對象,然後打印出我的find方法,以便它顯示無論它是否找到我請求的對象。 例如:螺紋線程「主」java.lang.ClassCastException異常:
異常「主要」 java.lang.ClassCastException:樹節點不能在BinarySearchTree2轉換爲java.lang.Comparable的
BinarySearchTree2<Integer> theData1 = new BinarySearchTree2<Integer>();
long start1 = System.currentTimeMillis();
theData1.insert(c1);
theData1.insert(c2);
theData1.insert(c3);
theData1.delete(c2);
System.out.println(theData1.find(c1));
System.out.println(theData1.find(c2));
System.out.println(theData1.find(c3));
System.out.println(theData1.find(c4));
當我運行它,我收到此錯誤。刪除(BinarySearchTree2.java:83) 在Driver5.main(Driver5.java:36)
然後指向我的BST類的刪除方法,該方法是:
public void delete(E item) {
TreeNode<E> nd = root;
while(nd != null && nd.getItem().compareTo(item) != 0)
{
if(nd.getItem().compareTo(item) < 0)
nd = nd.getRight();
else
nd = nd.getLeft();
}
if(nd.getLeft() == null && nd.getRight() == null)
{
nd = null;
}
else if(nd.getLeft() != null && nd.getRight() == null)
{
nd.setItem((E)nd.getLeft());
}
else if(nd.getLeft() == null && nd.getRight() != null)
{
nd.setItem((E)nd.getRight());
}
else if(nd.getLeft() != null && nd.getRight() != null)
{
nd.setItem((E)findsucc(nd));
}
}
直接錯誤指向此行我的刪除方法:
nd.setItem((E)nd.getRight());
凱沙夫,你是完全正確的......我一直在俯瞰一個小時這個小錯誤,無法算出它的線。非常感謝你,非常有意義 – user450267 2010-09-17 05:44:17
我現在得到一個空指針異常,因爲我在 – user450267 2010-09-17 06:19:31
如果(nd.getLeft()== NULL && nd.getRight()== NULL) \t \t \t輸入更多的物體插入BST { \t \t \t \t \t \t \t \t ND = NULL; \t \t \t} – user450267 2010-09-17 06:20:04