【发布时间】:2016-12-17 09:35:41
【问题描述】:
下面的递归函数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>
迭代遍历树的代码:
该函数以正确的顺序访问节点,但显然不打印结束标签。
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)
【问题讨论】:
-
展示你的迭代函数,它只能部分解决问题。
标签: python recursion tree iteration