[英]Why is the root different for the same character in my trie set-up? And how can I print the trie itself?
我正在設置一個trie
,這是我的代碼:
class Trie:
def __init__(self):
self.root = {}
self.endSymbol = "*"
def add(self, word):
node = self.root
for letter in word:
if letter not in node:
node[letter] = {}
node = node[letter]
node[self.endSymbol] = word
def multiStringSearch(smallStrings):
trie = Trie()
for word in smallStrings:
trie.add(word)
return trie
print(multiStringSearch(["abc", "mnopqr", "wyz", "no", "e", "tuuv","abb"])
兩個問題:
print out the trie
?"mnopqr"
和"no"
應該在'n'
的same root
下,但它們在上述結構中分別出現。trie
:class Trie:
def __init__(self):
self.root = {}
self.endSymbol = "*"
def add(self, word):
node = self.root
for letter in word:
if letter not in node:
node[letter] = {}
node = node[letter]
node[self.endSymbol] = word
def __str__(self):
return str(self.root)
def multiStringSearch(smallStrings):
trie = Trie()
for word in smallStrings:
trie.add(word)
return trie
if __name__ == "__main__":
trie = multiStringSearch(["abc", "mnopqr", "wyz", "no", "e", "tuuv","abb"])
print(trie)
abb
和abc
應該在同一個根目錄下,如果您打印出 `trie.ad 1) 以下代碼將打印帶有縮進的樹(以便於檢查樹)
class Trie:
def __init__(self):
self.root = {}
self.endSymbol = "*"
def add(self, word):
node = self.root
for letter in word:
if letter not in node:
node[letter] = {}
node = node[letter]
node[self.endSymbol] = word
def __str__(self):
return self.__format(self.root)
def __format(self, node, indent = 0):
s = ''
for key in node:
s += ' ' * indent
s += key
if key == self.endSymbol:
s += ' => ' + node[key]
s += '\n'
else:
s += '\n'
s += self.__format(node[key], indent + 1)
return s
def multiStringSearch(smallStrings):
trie = Trie()
for word in smallStrings:
trie.add(word)
return trie
print(multiStringSearch(["abc", "mnopqr", "wyz", "no", "e", "tuuv","abb"]))
Output:
a
b
c
* => abc
b
* => abb
m
n
o
p
q
r
* => mnopqr
w
y
z
* => wyz
n
o
* => no
e
* => e
t
u
u
v
* => tuuv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.