Arbres et graphes

Parcours, applications

Rédigé par l'équipe éditoriale de RévisionBac d'après le programme officiel · Mis à jour le · Méthodologie

Se connecter pour contribuerPublié le · Dernière mise à jour le

En clair. Parcours, applications

Ce qu'on te demande au bac (Spé NSI) : maîtriser le vocabulaire de « Arbres et graphes », savoir refaire les raisonnements du cours et les réutiliser sur un sujet ou un document nouveau.

Conseil de révision. Lis d'abord cet encadré, puis fais le quiz : si tu bloques, reprends la partie du cours correspondante.

Arbres et graphes

Définitions

Un graphe G=(S,A)G = (S, A) est constitué d'un ensemble de sommets SS et d'un ensemble d'arêtes A⊆S×SA \subseteq S \times S. Il est :

  • orienté si les arêtes ont un sens (arcs), non orienté sinon ;
  • pondéré si chaque arête porte un poids (distance, coût, capacité) ;
  • connexe s'il existe un chemin entre toute paire de sommets.

Un arbre est un graphe non orienté connexe sans cycle. Pour un arbre à nn sommets, il y a exactement n−1n-1 arêtes. Un arbre enraciné distingue un sommet (la racine) ; on parle alors de père, fils, frères, feuilles et nœuds internes.

Représentations en mémoire

ReprésentationEspaceTest d'arêteParcours voisins
Matrice d'adjacenceO(n2)O(n^2)O(1)O(1)O(n)O(n)
Liste d'adjacenceO(n+m)O(n + m)O(deg⁡)O(\deg)O(deg⁡)O(\deg)
# Liste d'adjacence (graphe orienté pondéré)
graphe = {
    'A': [('B', 5), ('C', 2)],
    'B': [('D', 3)],
    'C': [('B', 1), ('D', 6)],
    'D': []
}

Parcours

Parcours en profondeur (DFS) — utilise une pile (récursive ou explicite) :

def dfs(g, s, vus=None):
    if vus is None: vus = set()
    vus.add(s)
    for v, _ in g[s]:
        if v not in vus:
            dfs(g, v, vus)
    return vus

Parcours en largeur (BFS) — utilise une file ; donne le plus court chemin en nombre d'arêtes dans un graphe non pondéré.

from collections import deque
def bfs(g, depart):
    vus, file = {depart}, deque([depart])
    while file:
        s = file.popleft()
        for v, _ in g[s]:
            if v not in vus:
                vus.add(v); file.append(v)

Complexité des deux : O(n+m)O(n + m).

Arbres binaires

Un arbre binaire : chaque nœud a au plus 2 fils. Trois parcours classiques :

  • préfixe (racine, gauche, droite),
  • infixe (gauche, racine, droite) — donne une suite triée pour un ABR,
  • suffixe (gauche, droite, racine).

Un arbre binaire de recherche (ABR) vérifie : pour tout nœud xx, les clés du sous-arbre gauche sont <x< x et celles du sous-arbre droit sont >x> x. Recherche, insertion, suppression : O(h)O(h) où hh est la hauteur (O(log⁡n)O(\log n) si équilibré, O(n)O(n) dans le pire cas).

Sources et références

Ce cours est rédigé par l'équipe RévisionBac à partir du programme officiel et des sources institutionnelles ci-dessous. Elles permettent de vérifier les définitions, les chiffres et les normes citées.

  1. 1.Programmes et ressources du lycée général et technologique — Éduscol — Ministère de l'Éducation nationale
  2. 2.Bulletin officiel de l'Éducation nationale (programmes du baccalauréat) — education.gouv.fr
  3. 3.Ressources et programme de NSI — Éduscol
  4. 4.Documentation du langage Python — Python Software Foundation
  5. 5.Protection des données et RGPD — CNIL
  6. 6.Textes de loi et jurisprudence — Légifrance

Contenu vérifié et mis à jour le 10/09/2026. Les liens renvoient vers les sites officiels des éditeurs cités.

Historique éditorial

Ce chapitre est rédigé et relu par l'équipe RévisionBac, puis enrichi par les contributions validées.

  1. — Dernière mise à jour du cours (relecture et enrichissement)
  2. — Première publication de la fiche de cours