J'ai une arborescence de segments qui contient des données pour une plage de nombres (structure de données choisie here). Voici le code:Profondeur de parcours de traversée de l'arbre Python dépassée
class SegmentTree:
def __init__(self, N):
def _init(b, e):
if b is e:
data = foo() # No dependency
return Node(b, e, data, None, None)
else:
mid = (b + e)/2
L = _init(b, mid)
R = _init(mid + 1, e)
data = foo() #Data depends on L and R
return Node(b, e, data, L, R)
self.root = _init(1, N)
Cela échoue pour N autour de 300 avec une profondeur de récursivité maximale dépassée erreur. Y at-il un moyen de créer l'arbre de manière itérative au lieu de récursivement?
Oui, je voulais faire cela, mais j'ai besoin de faire mon traitement sur le nœud actuel après (récursivement) la création des nœuds L et R. Je ne suis pas sûr où/comment stocker le nœud actuel pour le traitement futur - sur une pile séparée? – knite
Eh bien, il y a généralement de meilleures façons d'implémenter la traversée d'arbre (bien qu'elles puissent se compliquer avec le twittage de pointeur et d'autres choses) au lieu d'utiliser une "pile". Après tout, si vous utilisez une pile sur le tas, vous n'économisez pas beaucoup d'espace (en dehors d'un facteur constant car vous devez économiser moins d'état) – Voo