0

Dictionary というクラスに、txt ファイルの内容を 1 行ずつ Java で再帰的に読み取り、各行をノードとしてツリーに追加するメソッドを作成する必要があります。ファイルの内容のサンプルを次に示します。

ourselves
out
over
own
same
shan't
she 
all
am
a
about
above
after
again
against
aren't 
should
shouldn't
so
some
such
than
that
that's
the
their

その長さの4倍以上続きます。既にバイナリ ツリーをセットアップしており、次のメソッドが含まれています。

getKey() //returns the value of the current node
setKey() //sets the value of the current node
getLeftChild() //gets the value of the left child of the node inside the parentheses 
getRightChild() //does the same as the above, but with the right child
setLeftChild(BinaryTreeNode node) //sets the left child
setRightChild(BinaryTreeNode node) //sets the right child

最終的に、ツリーは、txt ファイルからのテキストの個々の行をツリー内の個々のノードとして持つことになっています。私は再帰で多くの問題を抱えており、プログラムにファイルの内容を適切に読み取らせる方法がわかりません。提案や助けをいただければ幸いです。

それが役立つ場合、これは私がこれまでに持っている壊れた、1/4の完了した方法です:

public Dictionary(String filePath) throws IOException{ // the file path in my system for
        //dictionary.txt
        //I read from this file and build my tree. 
        BufferedReader br = new 
                BufferedReader(new FileReader("Dictionary.txt"));


        String word; 

        if ((word = br.readLine()) == null)
            System.out.println("Your tree is empty.");
        while ((word = br.readLine()) != null) {
            //now I need to tell it to add word as a node. 

        }
        br.close();

    }

- -編集 - -

ツリーの設定方法に関するその他の要件はありません。Dictionary.txt ファイルの個々のテキスト行は、単純に個々のノードでなければなりません。つまり、「自分自身」と「アウト」は別のノードである必要があります。

4

1 に答える 1

0

次のように構築できる があるNodeとします (現時点ではゲッターとセッターは必要ありません)。

 // the standard constructor to assign dummy values
 public Node(){
     this.key="";
     this.leftNode=null;
     this.rightNode=null;
 }

 // the constructor with parameters for both children
 public Node(String key, Node left, Node right){ 
      ...  // assign the paramteres
 }

最初に、実際にファイルを再帰的に読み取るメソッドを設定します。

 public Node readFile(BufferedReader reader){
     String word = reader.readLine();         
     if(word!=null){
         return new Node(word, readFile(reader), readFile(reader));            
     }else{
         return new Node() ;  // empty node or null?
     }      
 }

編集

次に、次のように辞書を初期化できます。

   private Node dictionaryTree;   // this is the tree within your dictionary class

   public Dictionary(String filePath) throws IOException{
         BufferedReader br = new BufferedReader(new FileReader("Dictionary.txt"));
         this.dictionaryTree = readFile(br);
         br.close();
   }

これが実際に希望どおりに機能するかどうかは 100% 確信が持てませんが、再帰の原則に従っています。その後、rootツリーが完成し、getLeftChild()およびgetRightChild()メソッドを使用してツリーを反復処理できます。

于 2013-04-11T23:15:59.973 に答える