問題:
我有一個trie,我想返回存儲在其中的信息。一些葉子有信息(設置值> 0),而一些葉子沒有。我想只返回那些有價值的葉子。如何使用發電機來遍歷一棵樹的葉子
由於每個節點上所有樹的葉數是可變的,每個值的關鍵實際上是到達每個葉所必需的路徑。
我想用發生器來遍歷樹的後序,但我不能讓它工作。我究竟做錯了什麼?
我的模塊:
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是非常重要的,因爲它對於數據訪問模式是非常有益的。
感謝您的幫助!
注:我已經省略了代碼塊中的換行符,以便能夠更容易地進行復制粘貼。
順便說一句,你可以改變葉子葉子 – 2010-09-21 00:04:53
@Tim Mcnamara。目前唯一的發電機是發電機_功能_不是發電機_表達_。 – aaronasterling 2010-09-21 00:07:52
感謝清理@Aaron,我的錯誤。 – 2010-09-21 00:26:24