Adloun

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

Plus petite valeur supérieure ou égale dans un ABR

Recherche séquentielle, dichotomique, arrière · niveau 2

Énoncé

Dans un arbre binaire de recherche (classe AB du cours), écrire une fonction récursive int plafond(int x, AB a) qui retourne la plus petite valeur de supérieure ou égale à , ou Integer.MAX_VALUE s'il n'y en a pas. Son temps de calcul doit être proportionnel à la hauteur de . Tester sur l'arbre obtenu en insérant dans un arbre vide.

Corrigé

On raisonne comme pour la fonction dans :

  • arbre vide : aucune valeur, on retourne Integer.MAX_VALUE ;
  • si , la réponse est ;
  • si , la racine et tout le sous-arbre gauche sont : la réponse est dans le sous-arbre droit ;
  • si , la racine est un candidat ; une meilleure réponse ne peut être que dans le sous-arbre gauche (le sous-arbre droit ne contient que des valeurs ).

static int plafond(int x, AB a) {
    if (vide(a)) return Integer.MAX_VALUE;     // aucune valeur
    if (vr(a) == x) return x;
    if (vr(a) < x) return plafond(x, sad(a));  // tout sag(a) est < x aussi
    return Math.min(vr(a), plafond(x, sag(a))); // vr(a) > x : candidat
}

Avec l'arbre de racine :


plafond(0) = 1
plafond(5) = 6
plafond(7) = 8
plafond(11) = 12
plafond(15) = 15
plafond(16) = aucune

Chaque appel descend d'un niveau : le nombre d'appels est au plus , le temps de calcul est proportionnel à la hauteur de l'arbre.

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 →