Проблема:
У меня есть 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, так как это очень полезно для шаблонов доступа к данным.
Спасибо за помощь!
Примечание: в блоке кода я пропустил новые строки, чтобы с большей легкостью копировать-вставлять.
Кстати, вы можете сменить листья на листья –
@Tim Mcnamara. Единственным генератором в поле зрения является генератор _function_, а не генератор _expression_. – aaronasterling
Спасибо за очистку, что @Aaron, моя ошибка. –