我一直在尝试在 Python 中实现一个简单的树结构。一棵树从一个具有子节点的“根”节点开始,它的每个子节点都可能有自己的子节点,依此类推。
现在,我想打印树的所有节点的名称,即我想将其转换为列表。我试图采用递归,但不幸的是递归地返回生成器对象的子树,我无法将其转换为节点。
有人可以帮助我并指出我在这里做错了什么吗?
class Node:
def __init__(self,name):
self.name = name
self.children = []
self.parent = None
def appendChild(self,child):
self.children.append(child)
if child is not None:
child.parent = self
def listChildren(self):
yield self
for child in self.children:
yield child.listChildren()
raise StopIteration
# test
r = Node("root")
n = Node("name")
r.appendChild(n)
n.appendChild(Node("name2"))
n.appendChild(Node("name3"))
c = Node("child")
n.appendChild(c)
c.appendChild(Node("child2"))
c.appendChild(Node("child3"))
r.appendChild(Node("name4"))
r.appendChild(Node("name5"))
r.appendChild(Node("name6"))
for child in r.listChildren():
print child.name
输出:
Traceback (most recent call last):
File "C:/Users/User/Documents/TreeNode.py", line 40, in <module>
print child.name
AttributeError: 'generator' object has no attribute 'name'
应该在迭代生成器时调用它,但在我的情况下, r.listChildren() 中的每个孩子反过来都是一个生成器对象。如果这是一个设计缺陷,那么我将不得不寻找另一种生成节点名称列表的方法。
先感谢您!