0

私は自分が間違っていたことをさまよっています。誰か助けてください。DDL(二重リンクリスト)データ構造を使用して、汎用BSTを作成しようとしています。isEmpty問題は、私のメソッドが機能するため、私の ADT が初期化されていることですが、私のpublic addNewElement訴訟private insertは機能しません。どんな助けやアドバイスも大歓迎です。

インターフェース:

public interface SortedSetBST <type> extends Iterable<type>{
            void addNewElement(Comparable<type> newElement);

    }

ADT:

package adt;

import java.util.Iterator;
import java.util.Iterator;

import interfaces.SortedSetBST;
import exceptions.*;

public class BinarySearchTree <type> implements SortedSetBST<type> {
    BinaryNode <type> root;
    int size;

    @Override
    public void addNewElement(Comparable  <type>  newElement) {
         insert(newElement, root);  
    }

protected BinaryNode  <type> insert( Comparable <type> x, BinaryNode <type>  t ) {
   if( t == null )
       t = new BinaryNode( x );
   else if( x.compareTo( t.element ) < 0 )
       t.left = insert( x, t.left );
   else if( x.compareTo( t.element ) > 0 )
       t.right = insert( x, t.right );
   else
       throw new DuplicateItemException( x.toString( ) );  // Duplicate
   return t;
}
class BinaryNode<type> {
    type element;      // The data in the node
    BinaryNode<type> left;         // Left child
    BinaryNode<type> right;        // Right child

    // Constructors
    BinaryNode( type theElement ) {
        element = theElement;
        left = right = null;
    }   
}

クラスアプリ

public class App {
    public static void main(String [] args){
        System.out.println("   Main:");
        BinarySearchTree <String> db = new BinarySearchTree<String>();

        if(db.isEmpty() == true){
            System.out.println(".db empty!");
        }
        db.addNewElement("unu");
        db.addNewElement("doi");
        db.addNewElement("trei");
        System.out.println(db.getSize());
    }
}

出力:

   Main:
.db empty!
0
4

1 に答える 1

1

これは明らかです。

「挿入」では、tがnullかどうかを確認しています。この場合、パラメータt を BinaryNode のインスタンスで初期化し、最初に "null" として渡されたときに root も更新すると考えます。しかし、"null" は Java では "null" であり、ご想像のとおり C スタイルのアドレスではありません!

次に、このパラメーターを返しますが、戻り値は「addNewElement」で失われます。

これを正しく行う方法:

if( t == null ) {
   if (root == null){
      root = new BinaryNode(x);
      return root;
   } else {
      t = new BinaryNode( x );
   }
}
于 2012-10-30T21:19:15.730 に答える