Prepa Help
Prepa Help › Cours › Informatique, 2e année

Arbres binaires, arbres binaires de recherche et tas : cours et exercices corrigés de prépa

Vocabulaire des arbres, hauteur et profondeur, arbres binaires représentés par des listes, fonctions récursives, parcours préfixe, infixe, postfixe et en largeur, arbres binaires de recherche (recherche, insertion, création, hauteur, suppression), tas (insertion, extraction, construction), file de priorité, tri par tas, complexités.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

Les arbres binaires sont au programme de deuxième année en MP, PSI et TSI au Maroc. On les représente en Python par des listes : l'arbre vide est [], un nœud est [r, G, D]. Sur un arbre de nn nœuds et de hauteur hh, comptée en arêtes (une feuille a la hauteur 0, l'arbre vide −1-1), une fonction récursive coûte O(n)O(n) et sa pile O(h)O(h). On le parcourt en profondeur (préfixe, infixe, postfixe) ou en largeur, avec une file deque. Dans un arbre binaire de recherche (ABR), la recherche et l'insertion coûtent O(h)O(h), entre O(log⁡n)O(\log n) et O(n)O(n) selon la forme de l'arbre. Un tas est un arbre binaire parfait rangé dans une liste : il donne le maximum en O(1)O(1), l'ajoute ou le retire en O(log⁡n)O(\log n), et sert de file de priorité et de base au tri par tas. Tu y trouves les définitions, les codes Python avec leurs preuves et leurs complexités au meilleur et au pire cas, puis des exercices corrigés, dont des sujets du CNC (arbre de Huffman, arbre des suffixes).

Ce que tu sauras faire

Une liste range des données les unes après les autres. Beaucoup de données sont pourtant hiérarchiques : des dossiers qui contiennent des dossiers, une famille et ses générations, une expression et ses sous-expressions. Les arbres les représentent, et deux arbres particuliers, l'arbre binaire de recherche et le tas, permettent de chercher, d'ajouter et de retirer bien plus vite qu'avec une liste. À la fin de ce chapitre, tu dois savoir :

L'essentiel : Vocabulaire et conventions Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

À retenir Définitions
  • Racine : le nœud sans père ; feuille : nœud sans fils ; nœud interne : nœud qui a au moins un fils.
  • Degré d'un nœud : son nombre de fils ; degré (ou ordre) d'un arbre : le plus grand degré de ses nœuds ; taille : nombre de nœuds.
  • Profondeur d'un nœud : nombre d'arêtes depuis la racine (racine : 0).
  • Hauteur : plus grande profondeur ; feuille seule : 0 ; arbre vide : −1-1.

Convention des sujets qui comptent les niveaux : hniveaux=h+1h_{\text{niveaux}} = h + 1. Au concours, on applique la définition de l'énoncé.

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 17 méthodes, 21 pièges corrigés, la carte mentale, 34 exercices corrigés, 3 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Ce chapitre est offert : il s’ouvre en entier avec un compte d’essai gratuit.

Ouvrir l'essai gratuit

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Lire une définition d'énoncé et l'appliquer à un petit arbre
  2. Passer d'un dessin à la liste [r, G, D], et inversement
  3. Écrire une fonction récursive sur un arbre binaire et la prouver
  4. Calculer la profondeur d'un nœud ou lister un niveau
  5. Démontrer une propriété d'arbre par récurrence
  6. Écrire et dérouler les parcours en profondeur
  7. Écrire le parcours en largeur avec une file et en donner la trace
  8. Évaluer et écrire un arbre d'expression
  9. Tester si un arbre est un ABR
  10. Rechercher une valeur, le minimum, le maximum dans un ABR
  11. Insérer dans un ABR, construire, trier
  12. Supprimer une valeur dans un ABR
  13. Passer de l'arbre parfait au tableau, et vérifier qu'une liste est un tas
  14. Insérer dans un tas et extraire la racine
  15. Construire un tas et trier par tas
  16. Justifier une complexité sur un arbre
  17. Supprimer une valeur quelconque d'un tas

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (13)

Entraînement (16)

Approfondissement (5)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Comment calculer la hauteur d'un arbre binaire ?

La hauteur est la plus grande profondeur d'un nœud, la profondeur étant le nombre d'arêtes depuis la racine. Avec cette convention, une feuille a la hauteur 0 et l'arbre vide −1-1 : hauteur(A) renvoie −1-1 si A est vide, sinon 1+max⁡1 + \max des hauteurs des deux sous-arbres, en O(n)O(n). Certains énoncés comptent les niveaux, ce qui ajoute 1 : au concours, on applique la définition de l'énoncé.

Quelle est la différence entre parcours préfixe, infixe et postfixe ?

Les trois visitent le sous-arbre gauche avant le droit ; ils diffèrent par le moment où l'on note la racine : avant ses sous-arbres (préfixe), entre les deux (infixe), après (postfixe). Le parcours infixe d'un arbre binaire de recherche donne ses valeurs dans l'ordre croissant. On les écrit avec une liste accumulateur remplie par append, en O(n)O(n) ; des concaténations répétées coûteraient O(nh)O(nh).

Comment faire un parcours en largeur d'un arbre binaire en Python ?

On utilise une file : F = deque() du module collections, on y met l'arbre, puis, tant qu'elle n'est pas vide, on retire le plus ancien sous-arbre par F.popleft(), on note sa racine et on ajoute ses sous-arbres non vides, le gauche d'abord. Le parcours est en O(n)O(n). Avec une liste et pop(0), chaque retrait décale toute la file et le parcours devient quadratique.

Quelle est la complexité de la recherche dans un arbre binaire de recherche ?

Elle est en O(h)O(h) : chaque comparaison fait descendre d'un niveau. C'est O(log⁡n)O(\log n) seulement si la hauteur est minimale, et O(n)O(n) pour un peigne, obtenu en insérant des données déjà triées. Construire un ABR par nn insertions coûte O(n2)O(n^2) au pire et O(nlog⁡n)O(n \log n) au meilleur : la construction n'est jamais linéaire.

Comment insérer et extraire dans un tas ?

Dans un tas-max rangé dans une liste, les fils de l'indice ii sont en 2i+12i + 1 et 2i+22i + 2, son père en (i−1)//2(i - 1) // 2. Pour insérer, on ajoute l'élément en fin de liste et on le fait remonter tant qu'il dépasse son père. Pour extraire le maximum, on met le dernier élément à la racine et on le fait descendre vers le plus grand de ses fils. Chaque opération coûte O(log⁡n)O(\log n) au pire et O(1)O(1) au meilleur.

Comment utiliser un tas comme file de priorité ?

On range des couples (priorité, numéro d'arrivée) et l'on retire toujours la racine. Dans le tas-max du cours, on range (priorité, −-numéro) : à priorité égale, c'est le premier arrivé qui sort, et l'on ne compare jamais les données elles-mêmes. Dans un tas-min, on range (priorité, numéro). Ajouts et retraits coûtent O(log⁡n)O(\log n), et l'on construit un tas à partir d'une liste en O(n)O(n) par descentes.

Comment y accéder

Ce chapitre fait partie des chapitres offerts : il s'ouvre en entier avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet, les tarifs ou une question, écris-nous sur WhatsApp.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France.

Essayer gratuitement Prepa Help

← Tri par fusion et tri rapide