Python 无法编写函数来检索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

我有以下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
        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(“”)
返回结果

但它似乎没有返回完整的单词列表。

以下是代码中的问题:

  • 为_fullpath
    为True时,它不会进一步查看。但在这种情况下,你也应该看得更深一些(更长的单词)

  • 它不应检查
    节点。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())