-2

私が抱えている問題は、バイナリ検索 3 があり、すべてのノードに整数値ではなく文字列値が含まれていることです。これらの文字列を txt ファイルから取得し、ファイルの個々のテキスト行をノードとしてツリーに配置します。これで問題ありません。

私の問題は、ツリーを反復処理して特定の単語を見つけるメソッドが必要なことです。作成しようとしているツリーの基礎として機能する BinarySearchTree と BinaryTreeNode という別個のクラスが既にあります。検索する必要がある単語は、「ルックアップ テスト ファイル copy.txt」というファイルにあり、検索した単語を「SearchResults.txt」という別のファイルに書き込む必要があります。

どうすればいいのかわからないので、アドバイスをいただければと思います。

これは私が助けを必要とする方法です:

public boolean SearchWord(String target){
    //returns true if the target string exists in the dictionary
    // otherwise it returns false
    //ALSO you need to write the results of Search 
    //in an output file called "SearchResults.txt" 

    return false;
}

上記の他の 2 つのクラスを除く、すべてのコードを次に示します。

public class Dictionary {
    public BinaryTreeNode theBinaryTree; 
    /**
     * I need to read one string by one string
     * and then insert it into a tree. 
     * I need to read all of the strings in the source file, line by line, 
     * and insert them into my dictionary. 
     * After readinga  single string, it needs to put it into a tree. 
     * I first need to create the dictionary tree, 
     * and then implement these methods on the tree. 
     * The Dictionary type is string. 
     * @throws FileNotFoundException 
     */

    private BinaryTreeNode 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();
       }


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


    /**
     * @return
     * Once again, I already have this method written and modified
     * within the BinarySearchTree class. 
     * I'm simply going to call it over here. 
     */
    public int CountWords(){
        //returns the number of words in the dictionary
        //This is just counting nodes. 

        BinarySearchTree Aria = new BinarySearchTree();
        return Aria.countNodes(dictionaryTree);     
    }

    public boolean SearchWord(String target){
        //returns true if the target string exists in the dictionary
        // otherwise it returns false
        //ALSO you need to write the results of Search 
        //in an output file called "SearchResults.txt" 

        return false;
    }

    /**
     * I already modified the print order method
     * in BinarySearchTree
     * to work with strings. 
     * So I just called it here on the dictionaryTree. 
     * @PrintOrderedDict()
     * 
     * However, I also had to modify the method, 
     * so that it wrote whatever values the method recieved
     * to teh output file. 
     */

    public void PrintOrderedDict() throws IOException{
        //Print the dictionary words 
        //in order in a new file called "OrderedDictionary.txt". 
        //Just modify print order to work with strings. 
        try {
        BinarySearchTree jojo = new BinarySearchTree();
        FileWriter fstream = new FileWriter("OrderedDictionary.txt");

        BufferedWriter out = new BufferedWriter(fstream);
        out.write(jojo.inorderPrint(dictionaryTree));

        out.close();}
        catch (Exception e) {
            System.err.println("Error");
        }

    }

    public boolean DeleteWord(String target){
        //delete the target word if it exits in the dictionary and return true
        //otherwise return false
        return false;
    }
}

ヘルプやアドバイスをいただければ幸いです。

- - 編集 - -

これも「dictionary.txt」ファイルの小さなサンプルです (全体を入れるには長すぎます)。

ourselves
out
over
own
same
shan't
she 
all

これは「ルックアップ テスト ファイル copy.txt」ファイルです。

the
program
a
ours
house
ME
ours
main
java
whom
with
4

3 に答える 3

0

問題を部分に分割します。

1) ファイルの読み方を検索します。ファイルを読み取り、結果を標準出力にエコーします。これは非常に簡単で、必要な作業の約 1/3 です。

2) いくつかのランダムな単語をファイルに書き込みます。ファイルを開き、単語を書き、作業を確認します。これも難しいことではなく、近づいています。

3) 二分探索木をロードし、ルックアップを行うコードを記述します。これは非常に簡単です。単語が現在のノードと等しい場合は true を返します。それ以外の場合は、現在のノードより小さい場合は左に移動し、大きい場合は右に移動します。ポインターが null の場合は、false を返します。

4) すべてをまとめます。

これを部分的に克服することは、はるかに圧倒的ではありません。

于 2013-04-12T01:28:26.677 に答える