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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.