Dans la traversée de traversée non réalisée du prélude, du support et du post-ordre, le poste post-postal est le plus gênant. être stocké dans la pile.
Il existe de nombreuses méthodes.
Copier le code du code comme suit:
Typedef struct {nœud * p; int rVisited;} snode // nœud est la structure du nœud de l'arborescence binaire.
LastOrderTaverse (Bitree BT) {
// Tout d'abord, commencez à partir du nœud racine, allez en bas à gauche, accédez à la tête et entrez chaque nœud sur le chemin dans la pile.
p = bt;
Tandis que (bt)
push (bt, 0);
bt = bt.lchild;
}
// Entrez ensuite dans le corps du cycle
While (! Stack.empty ()) {// Tant que la pile n'est pas vide
sn = stack.getTop ();
// Remarque, n'importe quel nœud N, tant qu'il a un enfant gauche, après n entrer dans la pile, l'enfant gauche de N doit suivre la pile (cela se reflète dans la seconde moitié de l'algorithme), donc lorsque nous obtenons le Empilez lorsque l'élément supérieur, vous pouvez être sûr que cet élément n'a pas d'enfant de gauche ou son enfant de gauche qui a été accessible, donc pour le moment nous ne nous soucions pas de son enfant gauche, nous ne nous soucions que de son enfant droit.
// Si le bon enfant a été accessible ou que l'élément n'a pas le bon enfant, la définition de la traversée post-séquentielle peut être parcourue.
if (! sn.p.rchild || sn.rVisited) {{
p = pop ();
Visite (P);
}
Sinon // Si son bon enfant existe et que RVisited est 0, cela signifie que le bon enfant qui n'a pas déménagé n'a pas été ému auparavant, il s'occupera donc de son bon enfant.
{{
// Pour le moment, nous devons aller en bas à gauche du nœud de l'enfant droit jusqu'à la fin, et mettre tous les nœuds sur ce chemin dans la pile.
// Bien sûr, définissez le RVisited du nœud à 1 avant d'entrer dans la pile, car la pile du bon enfant signifie que son bon enfant sera accessible avant lui (cela est bien compris car nous découvrons toujours de l'observation élément de la pile pour la visite). On peut voir que lorsque l'élément est en haut de la pile, le bon enfant doit être passé par visite, de sorte que le RVisited peut être réglé sur 1 ici.
sn.rVisited = 1;
// Aller à la fin en bas à gauche et mettre tous les éléments sur le chemin dans la pile
p = sn.p.rchild;
Tandis que (p! = 0) {
push (p, 0);
p = p.lchild;
}
} // Ce cycle est terminé.
}
}