Corrigé 43.  Enoncé

Soit
    A , P , Pprime Des Arb ;
    Soit Premier, Suiv des Fonctions ( Arb ) ;
    Ascendant_gauche, Lister des Action ;
    Xprime Un Entier ;
    Niv Un Entier ;

Debut
    Creer_arb ( A , [ 30 , 20 , 60 , 15 , 18 , 12 , 19 , 17 , 80 , 70 , 74 , 76 , 78 , 92 ] ) ;
    Lire ( Niv ) ;
    P := Premier ( Niv , A ) ;
    Si P <> Nil
        Ecrire ( Info ( P ) ) ;
        Appel Ascendant_gauche ( P , Niv , Pprime , Xprime ) ;
        Si Pprime <> Nil
            Ecrire ( Info ( Pprime ) , Xprime )
        Sinon
            Ecrire ( 'pas de suivant' ) ;
        Fsi ;
        Appel Lister ( P, niv ) ;
    Sinon
        Ecrire ( 'Niveau inexistant' )
    Fsi
Fin

/* PREMIER */
Fonction Premier ( X , R ) : Arb ;
Soit
    X Un Entier ;
    R , P Des Arb ;

Debut
    Si R = Nil
        Premier := Nil ;
    Sinon
        Si X = 0
            Premier := R
        Sinon
            P := Premier ( X - 1 , Fg ( R ) ) ;
            Si P = Nil
                Premier := Premier ( X - 1 , Fd ( R ) ) ;
            Sinon
                Premier := P ;
            Fsi
        Fsi
    Fsi
Fin

/* ASCENDANT_GAUCHE */
Action Ascendant_gauche ( N , I , Nprime , Iprime )
Soit
    N , Nprime Des Arb ;
    I , Iprime Des Entiers ;
    P Un Arb ;
    Arret Un Booleen ;
Debut
    P := Pere ( N ) ;
    Iprime := I - 1 ;
    Arret := Faux ;
    Tq Non Arret Et ( P <> Nil )
        Si ( Fg ( P ) = N ) Et ( Fd ( P ) <> Nil )
            Arret := Vrai
        Sinon
            N := P ;
            P := Pere ( N ) ;
            Iprime := Iprime - 1 ;
        Fsi
    Ftq ;
    Nprime := P
Fin

/* SUIV */
Fonction Suiv ( A , I ) : Arb
Soit
    P , A , Aprime Des Arb ;
    I , Iprime Des Entiers ;
    Continue Un Booleen ;
Debut
    Continue := Vrai ;
    Tantque Continue
        Appel Ascendant_gauche ( A , I , Aprime , Iprime ) ;
        Si Aprime = Nil
            Suiv := Nil ;
            Continue := Faux
        Sinon
            P := Premier ( I - Iprime - 1 , Fd ( Aprime ) ) ;
            Si P <> Nil
                Suiv := P ;
                Continue := Faux
            Sinon
                A := Aprime ;
                I := Iprime
            Fsi
        Fsi
    Fintantque
Fin

/* LISTER */
Action Lister ( P , Niv )
Soit
    Niv Un Entier ;
    Q , P Des Arb ;
Debut
    Q := Suiv ( P , Niv ) ;
    Tq Q <> Nil
        Ecrire ( 'suivant = ' , Info ( Q ) ) ;
        Q := Suiv ( Q , Niv )
    Ftq ;
    Ecrire ( 'plus de suivant dans le même niveau' )
Fin