Corrigé 12. Enoncé

1. Navigation dans un arbre de recherche binaire

Module de recherche


Un élément de la pile est le couple ( Pointeur, Sens).

    Créerpile( Pile)
    Trouv := FAUX
    P := Arbre
    TANTQUE P # NIL ET NON Trouv :
        SI Info(P) = A :
            Trouv := VRAI
        SINON
            SI A < Info(P) :
                Empiler(Pile, (P, Gauche))
                P := Fg(P)
            SINON
                Empiler(Pile, (P, Droite))
                P := Fd(P)
            FSI
        FSI
    FINTANTQUE

Fonction Suivantinordre(p)

    Recherche( Arbre, A, P, Pile)
    Q := Fd(P)
    SI Q # NIL :
        Sens := Droit
        TANTQUE Q # NIL :
            Empiler( Pile, (P, Sens))
            P:= Q
            Q := Fg(P)
            Sens := Gauche
        FINTANTQUE
        Suivantinordre := P
    SINON
        Dépiler( Pile, (N, Sens), Possible)
        { Possible est Vrai si le dépilement est possible }
        SI Possible :
            SI Sens = Gauche :
                Suivantinordre := N
            SINON
                Arrêt := FAUX
                TANTQUE NON Arrêt ET Possible :
                    SI Sens = Gauche :
                        Arrêt := VRAI
                    SINON
                        Dépiler(Pile,(N, Sens), Possible)
                    FSI
                FINTANTQUE
                SI Arrêt : Suivantinordre := N
                SINON Suivantinordre := NIL FSI
            FSI
        SINON
            Suivantinordre := NIL
        FSI
    FSI

Listage des éléments compris entre A et B ( A existe dans l'arbre)

    Recherche( Arbre, A, P, Pile)
    ECRIRE(A)
    R := Suivantinordre(P)
    Continue := VRAI
    TANTQUE Continue ET R # NIL :
        SI Info(R) <= B :
            ECRIRE( Info(R)) ; R :=Suivantinordre(R)
        SINON
            Continue := FAUX
        FSI
    FINTANTQUE

Listage des feuilles de l'arbre de gauche à droite

    { Recherche de la feuille la plus à gauche et construction du chemin }
    Créerpile(Pile)
    P := Arbre
    TANTQUE P # NIL :
        Empiler( Pile, (P, Gauche))
        Q := P
        P := Fg(P)
    FINTANTQUE
    R :=Q

    { Parcours séquentiel }
    TANTQUE R # NIL :
        SI Fg(R) = NIL ET Fd(R) = NIL :
            ECRIRE ( Info(R) )
        FSI
        R := Suivantinordre(R)
    FINTANTQUE


Complexité de Suivantinordre

On peut facilement montrer que la complexité est O(log2(n)), n étant le nombre de noeuds dans l'arbre de recherche binaire.