Voici un lien qui fournit deux autres solutions sans utiliser de drapeaux visités.
https://leetcode.com/problems/binary-tree-postorder-traversal/
Il s'agit évidemment d'une solution basée sur la pile en raison de l'absence de pointeur de parent dans l'arbre. (Nous n'aurions pas besoin d'une pile s'il y a un pointeur de parent).
Nous pousserions d'abord le nœud racine dans la pile. Tant que la pile n'est pas vide, nous continuons à pousser l'enfant gauche du noeud du haut de la pile. Si l'enfant de gauche n'existe pas, nous poussons son enfant de droite. Si c'est un noeud feuille, nous traitons le noeud et le sortons de la pile.
Nous utilisons également une variable pour garder la trace d'un nœud précédemment parcouru. Le but est de déterminer si la traversée est descendante/ascendante de l'arbre, et nous pouvons aussi savoir si elle est ascendante de la gauche/droite.
Si nous montons l'arbre depuis la gauche, nous ne voudrions pas pousser son enfant gauche à nouveau dans la pile et devrions continuer à monter dans l'arbre si son enfant droit existe. Si nous remontons l'arbre par la droite, nous devrions le traiter et le pousser hors de la pile.
Nous traiterions le nœud et le retirerions de la pile dans ces 3 cas :
- Le noeud est un noeud feuille (pas d'enfants)
- On traverse l'arbre en partant de la gauche et il n'y a pas d'enfant de droite.
- On traverse juste l'arbre à partir de la droite.
0 votes
Voici une excellente description : geeksforgeeks.org/iterative-postorder-traversal-using-stack