我正在使用一个称为字典树的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);
这并不意味着每当你得到一个以与前一个单词相同的字符开头的单词时,旧单词可能会被新单词替换掉?
使用未知数据类型和所有递归调用完全理解您的代码是不可能的。