试图在java中打印trie中的所有单词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图在java中打印trie中的所有单词相关的知识,希望对你有一定的参考价值。

我正在使用一个称为字典树的trie结构,我想打印所有单词。当我到达单词中的最后一个字母时插入单词时,我将完成的单词存储在字典树中。

private Map<Character, DictionaryTree> children = new LinkedHashMap<>();

private String completeWord;

void insertionHelper(String currentPortion, String fullWord){
    if(currentPortion.length() == 1){
        if(children.containsKey(currentPortion.charAt(0))){
           // do nothing

        }else{
            this.children.put(currentPortion.charAt(0), new DictionaryTree());
        }
        this.completeWord = fullWord;
    }else{
        if(children.containsKey(currentPortion.charAt(0))){
            children.get(currentPortion.charAt(0)).insertionHelper(currentPortion.substring(1), fullWord);
        }else{
            DictionaryTree a = new DictionaryTree();
            a.insertionHelper(currentPortion.substring(1), fullWord);
            children.put(currentPortion.charAt(0), a);
        }
    }

}

在此之后,当我查找所有单词时,我遍历每个节点并尝试将单词添加到静态数组List中,但是,由于某些原因,许多单词都是重复的,而其他单词则缺失。

String allWordHelper(){

    String holder = " ";
    for (Map.Entry<Character, DictionaryTree> child : children.entrySet()) {
        if(completeWord != null){
            //holder += completeWord + child.getValue().allWordHelper();
            Word_Holder.allWords.add(completeWord);

        }else{
            holder += child.getValue().allWordHelper();
        }

    }

    return holder;
}

我无法弄清楚为什么。

答案

我不知道DictionaryTree是什么,你的indata是什么样的,但如果你这样做

children.put(currentPortion.charAt(0), a);

这并不意味着每当你得到一个以与前一个单词相同的字符开头的单词时,旧单词可能会被新单词替换掉?

使用未知数据类型和所有递归调用完全理解您的代码是不可能的。

以上是关于试图在java中打印trie中的所有单词的主要内容,如果未能解决你的问题,请参考以下文章

[IOI2008] Type Printer 打印机

SML - 使用延续在 trie 中收集单词

Trie树

数据结构 ---[实现字典树[前缀树](Trie)]

片段(Java) | 机试题+算法思路+考点+代码解析 2023

算法复习——trie树(poj2001)