Corrigé 46. Enoncé
Soient
    A Un Arb De Chaine ;
    N Un Pointeur Vers Un Arb De Chaine ;
    Maxx, I des Entiers ;
    P_maxx : Arb De Chaine ;
    Construire, Rech, Feuille, Maxi des Actions ;
    Exist : Fonction ( Booleen ) ;

Debut
    Appel Construire ( A ) ;
    Ecrire ( 'Répertoire feuille' ) ;
    Appel Feuille ( A ) ;
    N := A ;
    Ecrire ( Exist ( '/y' , N ) ) ;
    Maxx := 0 ;
    Appel Maxi ( A , I ) ;
    Ecrire ( I ) ;
Fin
/* Rech */
Action Rech ( R , Nom , Trouv , P , Per ) ;
Soient
    Per , P , R Des Arb De Chaine ;
    Nom : Chaine ;
    Trouv : Booleen ;

Debut
    Trouv := Faux ;
    Per := Nil ;
    P := Fg ( R ) ;
    Tq ( P <> Nil ) Et ( Non Trouv )
        Si Nom = Info ( P )
            Trouv := Vrai
        Sinon
            Per := P ;
            P := Fd ( P )
        Fsi
    Ftq
Fin
/* Construction*/
Action Construire ( A ) ;
Soit
    R , P , Q , Per , A Des Arb De Chaine ;
    S : Chaine ;
    Arret , Trouv : Booleen ;
    I , J Des Entiers ;

Debut
    Creernoeud ( A ) ;
    Aff_info ( A , '/' ) ;
    Pour I := 1 , 8 : /* 8 désigne le nombre de répertoires */
        Lire ( S ) ;
        J := 2 ;
        R := A ;
        Arret := Faux ;
        Tq ( J <= Longchaine ( S ) ) Et ( Non Arret )
            Appel Rech ( R , Caract ( S , J ) , Trouv , P , Per ) ;
            Si Per = Nil
                Arret := Vrai ;
                Creernoeud ( Q ) ;
                Aff_info ( Q , Caract ( S , J ) ) ;
                Aff_fg ( R , Q )
            Sinon
                Si Trouv
                    R := P ;
                    J := J + 1
                Sinon
                    Creernoeud ( Q ) ;
                    Aff_info ( Q , Caract ( S , J ) ) ;
                    Aff_fd ( Per , Q ) ;
                    Arret := Vrai
                Fsi
            Fsi
        Ftq ;
        Si Arret
            J := J + 1 ;
            Tq J <= Longchaine ( S )
                R := Q ;
                Creernoeud ( Q ) ;
                Aff_info ( Q , Caract ( S , J ) ) ;
                Aff_fg ( R , Q ) ;
                J := J + 1 ;
            Ftq
        Fsi
    Finpour ;
Fin

/* Répertoires feuilles */
Action Feuille ( N ) ;
Soit
    N Un Arb De Chaine ;
Debut
    Si N <> Nil
        Si ( Fg ( N ) = Nil )
            Ecrire ( Info ( N ) )
        Fsi ;
        Appel Feuille ( Fg ( N ) ) ;
        Appel Feuille ( Fd ( N ) )
    Fsi
Fin

/* Recherche d'un répertoire */
Fonction Exist ( Rep , N ) : Booleen
Soit
    P , Per , N Des Arb De Chaine ;
    Rep : Chaine ;
    Trouv : Booleen ;
    J Un Entier ;

Debut
    Si Caract ( Rep , 1 ) <> Info ( N )
        Exist := Faux
    Sinon
        J := 2 ;
        Trouv := Faux ;
        Tq ( J <= Longchaine ( Rep ) ) Et Non Trouv
            Appel Rech ( N , Caract ( Rep , J ) , Trouv , P , Per ) ;
            Si Trouv
                N := P ;
                J := J + 1
            Fsi
        Ftq ;
        Exist := Trouv
    Fsi
Fin

/* Plus grand répertoire */
Action Maxi ( N , K )
Soit
    I , K , K1 Des Entiers ;
    N , P : Arb De Chaines ;

Debut
    P := Fg ( N ) ;
    I := 0 ;
    Tq P <> Nil
        I := I + 1 ;
        Appel Maxi ( P , K1 ) ;
        Si K1 > Maxx
            Maxx := K1 ;
            P_maxx := P
        Fsi ;
        P := Fd ( P )
    Ftq ;
    K := I ;
    Si K > Maxx
        Maxx := K ;
        P_maxx := N
    Fsi
Fin