Python 无法编写函数来检索trie中的所有单词
我有以下Trie实现:Python 无法编写函数来检索trie中的所有单词,python,data-structures,trie,Python,Data Structures,Trie,我有以下Trie实现: class TrieNode: def __init__(self): self.nodes = defaultdict(TrieNode) self.is_fullpath = False class Trie: def __init__(self): self.root = TrieNode() def insert(self, word): curr = self.root
class TrieNode:
def __init__(self):
self.nodes = defaultdict(TrieNode)
self.is_fullpath = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
curr = self.root
for char in word:
curr = curr.nodes[char]
curr.is_fullpath = True
我正在尝试编写一个方法来检索trie中所有单词的列表
t = Trie()
t.insert('a')
t.insert('ab')
print(t.paths()) # ---> ['a', 'ab']
我当前的实现如下所示:
def路径(self,node=None):
如果节点为无:
node=self.root
结果=[]
对于node.nodes.items()中的k,v:
如果不是node.is_完整路径:
对于自路径中的el(v):
结果追加(str(k)+el)
其他:
result.append(“”)
返回结果
但它似乎没有返回完整的单词列表。以下是代码中的问题:
- 当
为True时,它不会进一步查看。但在这种情况下,你也应该看得更深一些(更长的单词)为_fullpath
- 它不应检查
,而应检查节点。is_fullpath
v.is_fullpath
不正确。它应该是result.append(“”)
result.append(str(k))
for
循环体可以如下所示:
如果v.u为完整路径:
结果.追加(str(k))
对于自路径中的el(v):
结果追加(str(k)+el)
不过,我会这样做:
在Trinode
类上定义此递归生成器方法:
def路径(self,前缀=”):
如果self.u是完整路径:
产量前缀
对于chr,self.nodes.items()中的节点:
从节点路径(前缀+chr)生成
请注意,这是如何将路径上收集的字符传递给递归调用的。如果在任何时候为_fullpath
布尔值为True,我们将生成该路径。我们总是通过子节点递归地继续搜索
Trie
类上的方法非常简单:
def路径(自):
返回列表(self.root.paths())