0

データ構造 (バイナリ検索ツリー) の 1 つをテストするためにドライバーを使用していて、この問題に遭遇しました。-2つ以上のオブジェクトをbstに挿入すると発生します -私がやろうとしているのは、ツリーに4つのオブジェクトを挿入し、次に2つのオブジェクトを削除してから、findメソッドを出力して、私が要求したオブジェクトが見つかりませんでした。例えば:

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));

実行すると、次のエラーが表示されます。

スレッド「メイン」の例外 java.lang.ClassCastException: TreeNode は Driver5.main(Driver5.java:36) の BinarySearchTree2.delete(BinarySearchTree2.java:83) で java.lang.Comparable にキャストできません

次に、私のbstクラスのdeleteメソッドを指します:

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());
4

1 に答える 1

2

E の宣言は「E extends Comaprable」であると思います。その場合、それを呼び出したときnd.getRightに、キャストが成功するために比較可能でなければならない TreeNode インスタンスが返されました。

例外が発生した行は、キャストを渡すために次のようになります。

nd.setItem(nd.getRight.getItem)
于 2010-09-17T05:38:47.167 に答える