Adloun

algorithmique (école d'ingénieur) · Chapitre 13 · Exercice de TD

Taille, hauteur et feuilles d'un arbre binaire

Diviser pour régner · niveau 1 (application)

Énoncé

Avec la classe AB du cours, écrire trois fonctions récursives :

  • int taille(AB a), le nombre de valeurs de ;
  • int h(AB a), sa hauteur, avec la convention ;
  • int feuilles(AB a), son nombre de feuilles.

Donner leur complexité. Tester sur .

Corrigé

Chaque fonction applique la même décomposition : un arbre vide, ou une racine et deux sous-arbres.


static int taille(AB a) {
    if (vide(a)) return 0;
    return 1 + taille(sag(a)) + taille(sad(a));
}
static int h(AB a) {
    if (vide(a)) return -1;
    return 1 + Math.max(h(sag(a)), h(sad(a)));
}
static int feuilles(AB a) {
    if (vide(a)) return 0;
    if (vide(sag(a)) && vide(sad(a))) return 1;   // a est une feuille
    return feuilles(sag(a)) + feuilles(sad(a));
}

a : taille 3, h 1, feuilles 2
b : taille 9, h 3, feuilles 5
() : taille 0, h -1, feuilles 0

( est l'arbre de racine du cours.) Chaque nœud donne lieu à un appel, et chaque arbre vide aussi ; un arbre de valeurs a sous-arbres vides. Le corps de chaque fonction est en temps constant : .

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →