6. Arbres : parcours en profondeurs

Cf. TD2

Un arbre enraciné (ou arborescence) est une structure formelle que l’on rencontre dans de nombreuse situations. Les arbres sont souvent représenté avec la racine en haut et les feuilles en bas.

Illustrations

graph TD;
/-->home & proc & dev & foot;
home-->login1 & login2 & key;
login1-->docs & vinte;

Arbre binaire étiqueté par des nombre :

graph TD;
3-->2 & 5;
2-->1;
5-->6 & 20;
20-->7;

Arbre binaire non étiqueté :
ArbreBNE_exemple_explication

On peut caractériser un arbre par une définition récursive :

Définition (arbre binaire non étiqueté, ABNE)

Un ABNE est :

Exemple

exemple_arbre_BNE

Définition (plus symbolique et équivalente) :

Arbre BNE := arbreVide | ArbreBNE * ArbreBNE

Définition (Arbre Binaire étiqueté par des entiers)

Arbre BE := arbreVide | ArbreBE * ArbreBE * ℤ

Exemple

exemple_arbre_BE

En C

typedef struct noeud {
    int etiquette;
    struct noeud * arbreGauche;
    struct noeud * arbreDroit;
} Noeud;


typedef Noeud * Arbre;

Arbre: a = NULL; // a est l'arbre vide

schema_C_arbreBE

Parcours d’arbre

Pour représenter un arbre par une liste de mots (ou de nombres).

Parcours en préfixé

On peut *(re)*fabriquer un arbre à partir de son parcours en préfixé.

Parcours en infixé :

Exemple

exemple_parcours_arbre_infixe
Un parcours infixé de cet arbre donne : \perp 2 \perp 1 \perp

exemple_parcours_arbre_infixe2
Un parcours infixé de cet arbre donne : \perp 2 \perp 1 \perp
==> Deux arbre différents peuvent donner le même parcours infixé.

Parcours suffixe