Exercice 2
Arbres feuillus Les arbres considérés dans cet exercice sont des arbres binaires feuillus (complets) dont les noeuds sont des entiers . À un tel arbre A on associe le mot
ou r est la racine de A, G son sous-srbre gauche et D son sous-abre droit.
1)Calculer
Str((1,(2,(3),(4)),(5))) et
Str((1,(2),(3,(4),(5)))) Dessinez les arbres qui correspondent aux mots 0001111 et 0101011
Str((1,(2,(3),(4)),(5)))
00111
Str((1,(2),(3,(4),(5))))
01011
2)Soit x = Str(A) et y = Str(B) pour 2 arbres A et B
Montrez que x = y si et seulement si A et B sont égaux à la numérotaion près de leurs noeuds (autrement dit, s'il existe une bijection entre les noeuds qui respecte la structure de l'arbre)
*si A = B on a Str(A) = Str(B) et donc x=y
*si x = y on a Str(a) = Str(B) et donc A = B
3)Indiquer
comment mémoriser dans un fichier le code obtenu par la méthode de Huffman , en adaptant la fonction Str à appliquer à l'arbre de Huffman de codage
Pour mémoriser dans un fichier le code obtenu,il suffit d'indiquer que la valeur 0 correspond à un noeud et 1 à une feuille.
En parcourant la suite binaire on pourra reconstituer l'arbre.
4)
Ecrire une fonction C qui produit sur la sortie standart x = Str(A) pour un arbre A - Code: Tout sélectionner
typedef struct noeud
{
int val;
struct noeud *g,d;
}Noeud ;
typedef Noeud *Arbre;
void Str(Arbre A)
{
printf('0');
while(A->g->g !=NULL)
{
printf('0');
A = A->g;
}
printf('1');
while(A->d->d !=NULL)
{
printf('0');
A = A->d;
}
printf('1');
}
5)
Ecrire une fonction C qui, à partir d'un mot binaire Str(A) sur l'entée standart ,reconstruit l'arbre A