根據維基百科,關於特里:字典分類與特里
一組鍵的字典分類可以用一個簡單的基於特里樹的算法來完成如下:
- 插入一個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