【发布时间】:2023-02-02 10:04:15
【问题描述】:
我已经使用 Python 中存储单词的列表实现了一个特里树。
我正在尝试编写一个函数,以递归方式将单词插入到 trie 中。
这是我的特里类和函数insert():
class trie :
def __init__(self, char):
self.char = char
self.children = []
def __repr__ (self):
return "%s %s" %(self.char, self.children)
def __str__ (self):
return "[%s %s]" %(self.char, self.children)
def rest(lst) :
return lst.children[-1]
def insert(root, word) :
if len(word) == 0 :
return "FIN"
elif root.char == word[0] :
return insert(rest(root), word[1:])
elif root.char != word[0] :
root.children.append(trie(word[0]))
return insert(rest(root), word[1:])
问题是 insert() 函数没有将单词插入到正确的子项中。例如 :
t = trie("#") # root
insert(t, "cat")
insert(t, "#card")
insert(t, "#dog")
print(t)
函数 insert() 返回树 [c [a [t [r [d []]]], d [o [g []]]]],但树应该是 [c [a [t []], [r [d []]]], [d [o [g []]]]]。更具体地说,字符“r”和“d”应该在“a”的孩子中。
【问题讨论】:
-
为儿童集合使用字典会更合适。现在您将不得不在孩子中搜索匹配的字符,这确实会破坏 Trie 可以提供的性能。
标签: python python-3.x recursion trie