0

ようやく完成した Java Trie を作成していますが、Trie 内のすべての値を返す getWords() 関数を追加しています。

その機能に問題があります。簡単な背景情報: すべての文字には、実際にはすべての親文字を含む単語全体である「インデックス」があります。"soup" という単語を入力すると、文字 p の値は isWord = true および index = "soup" になります。

また、表示される 'children' 変数は HashMap であり、この関数は TrieNode クラス内にあることに注意してください。

私に問題を与えるコード:

private List<String> wordList = new ArrayList<String>();

public List<String> getWords(){

   /*Iterate through trie for every value in the hash map.
    Find all words with isWord= true and add that index to wordList
    */

   String word;
   for(Character key : children.keySet()){
       children.get(key).getWords();
       if(children.get(key).isWord == true){
           word = (children.get(key).index);
           wordList.add(word);
           System.out.println(wordList);  //prints list here for test
       }
   }
   System.out.println(wordList);  // prints again for test (second print)
   return wordList;
}

最初の print ステートメントは、isWord が true のときにハッシュ マップが現在存在していた現在の単語である 1 つの単語を出力します。次に印刷するとき (再帰的に実行する場合) は、その 1 つの単語だけを再度印刷します。

IE: "soup" と "hello" という 2 つの単語をトライに追加すると、hello とsoup がそれぞれの行に出力されますが、2 回目にリスト全体を出力すると、wordList は明らかに最初の単語を失います。

wordList から単語が失われている理由がわかりません。最初は「こんにちは」、2 回目は「こんにちはスープ」と出力する必要があります。

関数が完了すると、完全に空で何も含まれていない wordList が返されます。

編集:

混乱のため、ここに少しビジュアルを追加します。(トライのすべてのコードを含めるのは不要すぎるでしょう)。

単語「こんにちは」「こんにちは」「スープ」をトライに追加する

次の構造を与えます

トライ全体に 2 つのキーと値のペアが含まれるようになりました。HとS.

H は、内部に個別の Trie 全体を含むキーです。H の中には、ノード I と E があります (hello と hi の場合)。

S ノードには O があり、O には U などがあります。

ハッシュマップキーを反復処理してSとHのみを取得できるため、再帰が必要です。これらのノードのキーも必要なので、これを再帰的に行います。

これらの接頭辞の最後には、最終的に単語が続きます。単語に到達したら、それを wordList に追加します。

最後に、最終的にwordListを返したい

4

1 に答える 1