推出一個新系列,《看圖輕鬆理解數據結構和算法》,主要使用圖片來描述常見的數據結構和算法,輕鬆閱讀並理解掌握。本系列包括各類堆、各類隊列、各類列表、各類樹、各類圖、各類排序等等幾十篇的樣子。mysql
Trie樹,是一種搜索樹,也稱字典樹或單詞查找樹,此外也稱前綴樹,由於某節點的後代存在共同的前綴。它的key都爲字符串,能作到高效查詢和插入,時間複雜度爲O(k),k爲字符串長度,缺點是若是大量字符串沒有共同前綴時很耗內存。它的核心思想就是減小不必的字符比較,使查詢高效率,即用空間換時間,再利用共同前綴來提升查詢效率。算法
對he、him、his、she、her、hers六個字符串進行插入,開始插入he字符串,插入第一個字符是h,此時樹爲空,因此先建立空的根節點,sql
接着從根節點開始,不存在h子節點,因而建立子節點h,網絡
在h節點的基礎上繼續插入第二個字符e,數據結構
h節點不存在e子節點,建立子節點e,並將該節點標記爲單詞標誌,完成he字符串插入。併發
接着插入him字符串,從根節點開始,發現h子節點已有,機器學習
移到h子節點,數據結構和算法
繼續處理第二個字符i,h節點不存在i子節點,因而建立i子節點,學習
處理第三個字符m,i節點不存在子節點m,因而建立m子節點,並將該節點標記爲單詞標誌,完成him插入。.net
接着插入his字符串,從根節點開始,發現h子節點已有,
移到h子節點,
繼續處理第二個字符i,h節點已存在i子節點,因而移到i節點,
處理第三個字符s,i節點不存在子節點s,因而建立s子節點,並將該節點標記爲單詞標誌,完成his插入。
繼續插入she字符串,從根節點開始,首先處理第一個字符s,發現s子節點不存在,因而建立s節點,
接着處理第二個字符h,s節點不存在h子節點,建立h節點,
繼續處理第三個字符e,h節點不存在e子節點,建立e節點,並將該節點標記爲單詞標誌,至此完成she字符串插入。
相似地,將her、hers字符串插入到樹中,最終爲:
查找hi字符串,從根節點開始,
根節點存在h子節點,移動到h節點,
繼續找i子節點,存在,但i並無單詞標誌,因此hi字符串不存在。
查找his字符串,從根節點開始,
根節點存在h子節點,移動到h節點,
h節點存在i子節點,移動到i節點,
繼續找s子節點,存在,並且s節點爲單詞標誌,找到his字符串。
而若是查找hist字符串,則最後的t找不到,因此不存在該字符串。
刪除she字符串,從根節點開始查找第一個字符s,
找到s子節點,下移到s節點,繼續查找字符h,
找到h子節點,下移到h節點,繼續查找字符e,
找到e節點,已經找到she字符串,將e節點的單詞標誌去掉,
此時發現e節點爲葉子節點,將其刪除,
刪除後發現h節點爲葉子節點,且其不是單詞標誌,將其刪除,
刪除後發現s節點爲葉子節點,且其不是單詞標誌,將其刪除,完成she字符串刪除操做。
刪除her字符串,從根節點開始查找第一個字符h,
找到h子節點,下移到h節點,繼續查找字符e,
找到e子節點,下移到e節點,繼續查找字符r,
找到r子節點,此時完成整個字符串查找,由於不是葉子節點,只需將其單詞標誌去掉便可。
刪除his,從根節點開始查找第一個字符h,
找到h子節點,下移到h節點,繼續查找字符i,
找到i子節點,下移到i節點,繼續查找字符s,
找到s子節點,此時完成整個字符串查找,
刪除後發現s節點爲葉子節點,將其刪除,
刪除後發現i節點爲非葉子節點,中止刪除,完成his字符串刪除操做。
-------------推薦閱讀------------
個人開源項目彙總(機器&深度學習、NLP、網絡IO、AIML、mysql協議、chatbot)
跟我交流,向我提問:
歡迎關注: