我有一个trie,我想要返回存储在其中的信息。一些叶子有信息(设置为值> 0)而一些叶子没有。我想只返回那些有价值的叶子。
因为在每个节点上所有trie的叶子数量都是可变的,并且每个值的键实际上由到达每个叶子所需的路径组成。
我正在尝试使用生成器遍历树后序,但我无法让它工作。我做错了什么?
class Node():
'''Each leaf in the trie is a Node() class'''
def __init__(self):
self.children = {}
self.value = 0
class Trie():
'''The Trie() holds all nodes and can return a list of their values'''
def __init__(self):
self.root = Node()
def add(self, key, value):
'''Store a "value" in a position "key"'''
node = self.root
for digit in key:
number = digit
if number not in node.children:
node.children[number] = Node()
node = node.children[number]
node.value = value
def __iter__(self):
return self.postorder(self.root)
def postorder(self, node):
if node:
for child in node.children.values():
self.postorder(child)
# Do my printing / job related stuff here
if node.value > 0:
yield node.value
>>trie = Trie()
>>trie.add('foo', 3)
>>trie.add('foobar', 5)
>>trie.add('fobaz', 23)
>>for key in trie:
>>....print key
>>
3
5
23
我知道给出的示例很简单,可以使用任何其他数据结构来解决。但是,对于此程序而言,使用trie非常重要,因为它对数据访问模式非常有益。
感谢您的帮助!
注意:我在代码块中省略了换行符,以便能够更轻松地进行复制粘贴。
答案 0 :(得分:2)
更改
self.postorder(child)
到
for n in self.postorder(child):
yield n
似乎让它发挥作用。
P.S。为了方便切割而省略空白行是非常有帮助的。粘贴:))