Je suis en mesure de comprendre précommande traversée sans utiliser la récursivité, mais je vais avoir un moment difficile avec afinde traversée. Je ne semblent tout simplement pas l'obtenir, peut-être, parce que je n'ai pas compris le fonctionnement interne de la récursivité.
C'est ce que j'ai essayé jusqu'à présent:
def traverseInorder(node):
lifo = Lifo()
lifo.push(node)
while True:
if node is None:
break
if node.left is not None:
lifo.push(node.left)
node = node.left
continue
prev = node
while True:
if node is None:
break
print node.value
prev = node
node = lifo.pop()
node = prev
if node.right is not None:
lifo.push(node.right)
node = node.right
else:
break
L'intérieur tandis que la boucle ne fonctionne tout simplement pas. Aussi, certains éléments sont arriver imprimé deux fois; peut-être que je peux résoudre ce problème en vérifiant si le nœud a été imprimé avant, mais qui nécessite une autre variable, qui, encore une fois, ne vous sentez pas bien. Où vais-je tort?
Je n'ai pas essayé postorder de la traversée, mais j'imagine que c'est similaire et je ferai face à la même conceptuel blocage il y a, trop.
Merci pour votre temps!
P. S.: Définitions, Lifo
et Node
:
class Node:
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
class Lifo:
def __init__(self):
self.lifo = ()
def push(self, data):
self.lifo = (data, self.lifo)
def pop(self):
if len(self.lifo) == 0:
return None
ret, self.lifo = self.lifo
return ret