Corrigé 22.  Enoncé

1. Parcours d'un arbre de recherche binaire - Transformation récursif --> itératif

Algorithme non récursif de recherche d'un élément E

    P := Arbre
    Trouv := FAUX
    TANTQUE P # NIL ET NON Trouv :
        SI Info(P) = Val :
            Trouv := VRAI
        SINON
            SI Info(P) > E :
                P := Fg(P)
            SINON
                P := Fd(P)
            FSI
        FSI
    FINTANTQUE

Algorithme non récursif de parcours inordre avec une pile

    Créerpile(Pile)
    Possible := VRAI
    TANTQUE Possible :
        TANTQUE P # NIL :
            Empiler (Pile, P) ;     P := Fg(P)
        FINTANTQUE
        SI NON Pilevide(Pile) :
            Dépiler(Pile, P)
            " Info(P) " ;      P := Fd(P)
        SINON
            Possible := FAUX
        FSI
    FINTANTQUE

Algorithme récursif de parcours "postordre"

    Post(N) :
    SI N # NIL :
        Post(Fg(N)) ; Post(Fd(N))
        " Info(N)"
    FSI

Traduction automatique de l'algorithme récursif de parcours "postordre"

Soit Zdd une variable composée de deux champs : le paramètre N et l'adresse de retour Adr.

             Créerpile(Pile)
            Zdd.N := N
            Zdd.Adr := 1
            Empiler(Pile, Zdd)
10:       SI Zdd.N # NIL :
            Empiler(Pile, Zdd)
            Zdd.N := Fg(Zdd.N)
            Zdd.Adr := 2
            Allera 10
   
2:         { Retour du premier appel }
            Empiler(Pile, Zdd)
            Zdd.N := Fd(Zdd.N)
            Zdd.Adr := 3
            Allera 10
3:         Ecrire(  Info(P)  )
            I := Zdd.Adr
            Dépiler(Pile, Zdd)
            Allera I
    SINON
            I := Zdd.Adr
            Dépiler(Pile, Zdd)
            Allera I
    FSI


2. Implémentation d'une pile

Créerpile(Pile)             :     Pile := NIL
Pilevide(Pile)               :     Pilevide := ( Pile = NIL)
Empiler(Pile, Val)        :     Allouer (Q, Typemaillon)
                                             Aff_Val(Q, Val)
                                             Aff-Adr(Q, Pile)
                                             Pile := Q

Dépiler(Pile, Val)     :     SI NON Pilevide(Pile) :
                                            Q := Pile
                                            Valeur := Info(Pile)
                                            Pile := Suivant(Pile)
                                            Libérer(Q)
                                        SINON " Pile Vide" FSI


3. Implémentation d'une pile de files d'attente

Première implémentation
Schéma :


Description

    TYPE Typepile = POINTEUR( Typemaillon1)
    Typemaillon1 = STRUCTURE
        Info : Typefile
        Lien : POINTEUR(Typemaillon1)
    FIN
    TYPE Typefile = STRUCTURE
        Tete, Queue : POINTEUR( Typemaillon)
    FIN
    TYPE Typemaillon = STRUCTURE
        Info : Typeqq
        Lien : POINTEUR (Typemaillon)
    FIN       

Deuxième implémentation

Schéma


Description :

    TYPE Typepile = STRUCTURE
        Tab : TABLEAU[1..N] DE Typefile
        Sommet : ENTIER
    FIN
    TYPE Typefile = STRUCTURE
        Tete, Queue : POINTEUR ( Typemaillon)
    FIN
    TYPE Typemaillon = STRUCTURE
        Info : Typeqq
        Lien : POINTEUR (Typemaillon)
    FIN


4. Code de Huffman


5. Arbre de recherche m-aire


6. Arbre B