【发布时间】:2015-10-23 11:48:51
【问题描述】:
说明
我希望我的二叉树是可迭代的,这样我就可以循环访问每个节点一次。此外,inorder 是一个生成器函数,它返回Iterator,因此满足Iterable 合约。但是我下面的代码不是产生每个节点,而是产生根节点,在这种情况下是A。我做错了什么?
代码
from collections import namedtuple
Node = namedtuple('Node', 'data, left, right')
root = Node('A',
Node('B', Node('D', None, None), Node('E', None, None)),
Node('C', None, Node('F', None, None)))
class BinaryTree(object):
def __init__(self, root=None):
self.root = root
def __iter__(self):
return self.inorder(self.root)
def inorder(self, node):
if node is None:
return
if node.left is not None:
self.inorder(node.left)
yield node
if node.right is not None:
self.inorder(node.right)
bt = BinaryTree(root)
for node in bt:
print node.data
参考
【问题讨论】:
标签: python algorithm data-structures generator