根据维基百科,关于特里:字典分类与特里
一组键的字典分类可以用一个简单的基于特里树的算法来完成如下:
- 插入一个trie中的所有密钥。
- 通过预顺序遍历来输出trie中的所有密钥,这会导致按字典顺序递增的输出。
不过,这是我与我的标准特里执行测试:
Trie trie = new Trie();
trie.add("doll");
trie.add("ball");
trie.add("bat");
trie.add("dork");
trie.add("dorm");
trie.add("send");
trie.add("sense");
trie.add("sent");
预购打印:
public List<String> allWords(){
List<String> words = new ArrayList<String>();
if(root == null){
return words;
}
StringBuilder prefix = new StringBuilder();
getAllWords(root.children,prefix,words);
return words;
}
// depth first search
private void getAllWords(List<TrieNode> children, StringBuilder prefix, List<String> words){
for(int i= 0; i<children.size(); i++){
TrieNode child = children.get(i);
if(!child.isWord_){
prefix.append(child.data_);
allWordsHelper(child.children, prefix, words);
}else{
prefix.append(child.data_);
words.add(prefix.toString());
}
prefix.deleteCharAt(prefix.length()-1);
}
}
和输出顺序是:doll dork dorm ball bat send sense sent
'词典排序'是什么意思?看起来输出顺序更多地与插入顺序相关,而不是词典顺序。我错了吗? 以此树为例,预订打印输出将是“对茶十个旅店”。字典顺序在哪里?
您是否正在进行预购遍历打印输出时? –
是的,预购。由于首先插入了“娃娃”,所以即使在预购中它也必须先输出。在根源下,第一级角色是'd b s'。通过预购,首先打印带有'd'前缀的所有单词。 – user697911
想想上面描述的标准Trie数据结构和2步算法,没有任何信息来保证字典排序。这怎么可能? – user697911