Trie(字典樹)
字典樹的作用:它是利用單詞的公共前綴來節約儲存空間,因為單詞的前綴相同就會公用前綴的節點。比如搜索提示就可以根據輸入的前綴來提示可以構成的單詞。
前綴樹特點:
①:單詞前綴相同共用節點。
②:每個節點只存一個字母
③:根節點不包含字母
④:組成的單詞是根據所走過的路徑所決定的
⑤:因為我是用Python字典實現的所以數的子節點存在它的key中,沒一個單詞結束要有一個判斷決定它是一個單詞的結尾不然比如 輸入apple如果search(‘app‘)就不能判斷插入了這個單詞了。
⑥:兒子節點數量不定
代碼:
class Trie:
def __init__(self, root):
self.root = {}
def insert(self, sequence):
#從頭結點開始插入
node = self.root
for item in sequence:
if item not in node.keys():
node.[item] = {}
node = node[item]
#此時到了單詞的結尾,插入一個判斷詞
node[‘end‘] = True
def search(self, word):
curnode = self.root
for w in word:
if w not in node.keys():
return False
else:
node = node[w]
mark = node.get(‘end‘)
return mark is not None
def startsWith(self, prefix):
curnode = self.root
for w in prefix:
return False
curnode = curnode[w]
return True
if __name__ == "__main__":
t = Trie()
t.insert(‘apple‘)
assert not t.search(‘app‘)
assert t.search(‘apple‘)
t.insert(‘app‘)
assert t.search(‘app‘)
assert t.startsWith(‘app‘)
leetcode: https://leetcode-cn.com/problems/implement-trie-prefix-tree/submissions/
我的github代碼:https://github.com/pythonkd/python/blob/master/LeetCode/trie.py
Trie(字典樹)