Как можно преобразовать следующую рекурсивную функцию 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)
Покажите свою итерационную функцию, которая лишь частично решает эту проблему. –
Добавлен код. – chase37