Wie kann die folgende rekursive Funktion walk()
in eine iterative Funktion umgewandelt werden? Die Knoten in derselben Reihenfolge iterativ zu durchlaufen, ist einfach, wenn man einen Stapel benutzt, aber ich kann nicht herausfinden, wie man eine iterative Funktion schreibt, die die öffnenden und schließenden Tags jedes Knotens wie die rekursive Version ausgibt.Konvertieren rekursive Tree Walking-Funktion zu iterativen
Code:
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)
Ausgang:
<html>
<head>
</head>
<body>
<div>
</div>
<p>
<a>
</a>
</p>
</body>
</html>
Code, der den Baum iterativ durchläuft:
Die Funktion, die die Knoten in der richtigen Reihenfolge besucht, aber offensichtlich druckt das clos nicht Tags
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)
Zeigen Sie Ihre iterative Funktion, die das Problem löst nur teilweise. –
Der Code wurde hinzugefügt. – chase37