程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 字典樹的C++實現 Implement of trie tree

字典樹的C++實現 Implement of trie tree

編輯:C++入門知識

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了不就可以刪除了嗎?其實不然。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved