【发布时间】:2016-03-10 18:20:32
【问题描述】:
我添加了一个生成器函数,以便能够迭代预定义的 BinaryTree 类,但是当我使用测试代码运行它时,我收到一个 TypeError 说 BinaryTree 类不可迭代,我不知道为什么。以下是提供的代码以及用于遍历树的生成器函数以及测试代码:
# Implement generator function to make class iterable
class BinaryTree:
def __init__(self, content, leftSubtree=None, rightSubtree=None):
self.content = content
self.leftSubtree = leftSubtree
self.rightSubtree = rightSubtree
def __repr__(self):
return str(self.content)
def traverse(self): # Generator implementation
if self.rightSubtree:
for leaf in self.rightSubtree:
yield leaf
yield self.content
if self.leftSubtree:
for leaf in self.leftSubtree:
yield leaf
# Testing code
Node = BinaryTree
if __name__ == '__main__':
s = Node(1) # Binary tree with 1 Node
t = Node(10, s, None) # Binary tree with 10 as content, 1 as left subtree
tree = BinaryTree(20, None, t) # Binary tree with 20 as content, no left subtree and t as right subtree
for x in (s, t, tree):
print(x)
for node in tree:
print(node)
这是之后打印出来的错误:
1
Traceback (most recent call last):
10
20
File "...binaryTree_adt.py", line 34, in <module>
for node in tree:
TypeError: 'BinaryTree' object is not iterable
Process finished with exit code 1
我知道对于生成器,您不需要创建迭代器类,因为生成器将以类似的方式遍历项目。当我将“traverse”方法的名称更改为 iter 时,我没有收到任何错误,但是当名称更改时,我会这样做。
【问题讨论】: