2010-09-17 121 views
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()); 

回答

2

我猜您的電子的聲明是「E擴展Comaprable」,在這種情況下,當你叫nd.getRight它返回它必須是樹節點實例相當於演員取得成功。

在異常發生應該像下面劇組通過

nd.setItem(nd.getRight.getItem) 
+0

凱沙夫,你是完全正確的......我一直在俯瞰一個小時這個小錯誤,無法算出它的線。非常感謝你,非常有意義 – user450267 2010-09-17 05:44:17

+0

我現在得到一個空指針異常,因爲我在 – user450267 2010-09-17 06:19:31

+0

如果(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

相關問題