如何将以下递归函数walk()
转换为迭代函数?将递归树行走功能转换为迭代
以相同的顺序迭代节点很容易使用堆栈,但我无法弄清楚如何编写一个迭代函数来打印每个节点的开始和结束标签,就像递归版本一样。
代码:
class Node(object):
def __init__(self, name, children=[]):
self.name = name
self.children = children
def walk(node):
print('<', node.name, '>', sep='')
for n in node.children:
walk(n)
print('</', node.name, '>', sep='')
root = \
Node('html', [
Node('head'),
Node('body', [
Node('div'),
Node('p', [
Node('a'),
])
]),
])
walk(root)
输出:遍历迭代树
<html>
<head>
</head>
<body>
<div>
</div>
<p>
<a>
</a>
</p>
</body>
</html>
代码:
功能访问节点以正确的顺序,但显然不打印关闭ing标签。
def walk(node):
stack = []
stack.append(node)
while len(stack) > 0:
node = stack.pop()
for child in reversed(node.children):
stack.append(child)
print(node.name)
显示您的迭代函数,仅部分地解决了这个问题。 –
添加了代码。 – chase37