Trie,字典樹,又稱單詞查找樹、前綴樹,是一種哈希樹的變種。應用於字符串的統計與排序,經常被搜索引擎系統用於文本詞頻統計。
性質:
1.根節點不包含字符,除根節點外的每一個節點都只包含一個字符。
2.從根節點到某一節點,路徑上經過的字符連接起來,為該節點對應的字符串。
3.每個節點的所有子節點包含的字符都不相同。
優點是查詢快。對於長度為m的鍵值,最壞情況下只需花費O(m)的時間;而BST需要O(m log n)的時間。
本文用C++實現了字典樹的
建立,插入,遍歷,查找,刪除節點,刪除字典樹,統計含有指定前綴的單詞數等功能。
著重講述下列功能的實現。
插入單詞的實現:
1).設置當前節點為根節點,設置當前字符為插入字符串中的首個字符;
2).在當前節點的子節點上搜索當前字符,若存在,則將當前節點設為值為當前字符的子節點;否則新建一個值為當前字符的子節點,並將當前結點設置為新創建的節點。
3).將當前字符設置為串中的下個字符,若當前字符為0,則結束;否則轉2.
4).結束時,把最後一個節點(即此時的當前節點)的isEnd設為true,對應下圖中的黑色節點。表示該節點是一個單詞的結尾。
查找單詞的實現:
過程和插入單詞非常類似,這裡不再贅述。
刪除單詞的實現:
首先查找待刪除字符串,將路徑上的節點一個個入棧(本文用遞歸實現)。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+MaO6yPTNvtbQxLO49tfWt/vV0rK7tb2jrNTysrvJvrP9oaM8L3A+CjxwPjKjusj0tb2078HL19a3+7SutcTEqc6ytcTPwtK7uPbOu9bDo6zLtcP319a3+7Su1tDL+dPQ19a3+7751dK1vaOssNGw/Lqs19a3+7Su1+6689K7uPbX1rf7tcTEx7j2vdq148nozqqjqGlzRW5kID0gZmFsc2WjqaOsse3D97W9uMPOu9bDsrvKx9K7uPa1pbTKtcS94c6ywcuhozwvcD4KPHA+yOe5+7GjtObX1rf7tK7W0NfuuvPEx7j219a3+7XEvdq148rHuPbSttfTvdq146OovLRjaGlsZENudM6qMKOpo6zU8sm+s/24w7XjoaM8L3A+CjxwPr3Tz8LAtLHj0ruy49K7suPN+cnPt7W72KOsxdC2z7Wxx7C92rXjysfJvrP9u7nKx7GjwfSjujwvcD4KPHA+yPS1scewvdq147qi19POqjCjqGNoaWxkQ250zqowo6myosfStbHHsL3ateOyu86q0ru49rWltMq1xL3hzrLKsaOoaXNFbmTOqmZhbHNlo6mjrNTyyb6z/bjDvdq146Ost/HU8rK7yb6z/aGjPC9wPgo8cD4gPC9wPgo8cCBhbGlnbj0="left">容易造成的誤解是,若當前節點的孩子為0了不就可以刪除了嗎?其實不然。