前綴樹的結構
上圖是一棵Trie樹,表示了關鍵字集合{「a」, 「to」, 「tea」, 「ted」, 「ten」, 「i」, 「in」, 「inn」} 。從上圖能夠概括出Trie樹的基本性質:
①根節點不包含字符,除根節點外的每個子節點都包含一個字符。
②從根節點到某一個節點,路徑上通過的字符鏈接起來,爲該節點對應的字符串。
③每一個節點的全部子節點包含的字符互不相同。
④從第一字符開始有連續重複的字符只佔用一個節點,好比上面的to,和ten,中重複的單詞t只佔用了一個節點。
前綴樹的應用
一、前綴匹配
二、字符串檢索
三、詞頻統計
四、字符串排序node
下面看看怎樣使用前綴樹來實現前綴匹配的。數組
前綴匹配
瞭解了前綴樹的結構後,就能夠利用前綴樹的性質來解決現實中的問題。好比說查找一個字符串數組中是否含有前綴單詞,什麼是前綴單詞:上面的 in,就是 inn 的前綴單詞。若是有十幾萬條單詞,而且每一個單詞的長度都是5-10之內,這樣一定存在大量重複的字符,所以利用前綴樹來求解不只速度快並且空間複雜度也比較好。
①定義前綴樹結構code
class TrieNode{ private TrieNode[] links; private boolean isEnd; private final int R=26; private TrieNode root; /** Initialize your data structure here. */ public TrieNode() { links=new TrieNode[R]; } public boolean isContainsKey(char ch){ return links[ch-'a']!=null; } public TrieNode get(char ch){ return links[ch-'a']; } public void put(char ch,TrieNode node){ links[ch-'a']=node; } public void setEnd(){ isEnd=true; } public boolean isEnd(){ return isEnd; } }