Un arbre binaire de recherche
est un arbre binaire étiqueté, dont les étiquettes sont comparables, tel
que l'étiquette de la racine est plus grande que les étiquettes du
sous-arbre gauche et plus petite que les étiquettes du sous-arbre droit.
Cette structure permet de réaliser des opérations d'insertion, de
recherche et de suppression avec en coût en O(h), où h est la
hauteur de l'arbre (la longueur maximale d'un chemin de la racine à une
feuille). Or, la hauteur d'un arbre binaire comportant n nuds
est comprise entre
et n+1 ; les opérations ne sont donc pas
toujours efficaces. De plus, l'insertion de nouveaux n
uds dans un
arbre peut dégrader les performances des opérations ultérieures. Par
exemple, si l'on insère successivement n n
uds d'étiquettes
croissantes, l'arbre obtenu sera linéaire de hauteur n+1, ce qui est
le pire des cas. Il est possible de réarranger l'arbre après chaque
insertion ou suppression, de manière à conserver une configuration
favorable. Si l'on adopte une définition stricte de ce qu'est un arbre
équilibré, les réarrangements peuvent être très coûteux. Une
définition plus tolérante des déséquilibres permet de réaliser ces
réarrangements moins souvent, donc à un moindre coût global : on fait en
sorte qu'aucun chemin de la racine vers une feuille ne soit plus de deux
fois plus long qu'un autre. Cette contrainte est respectée grâce à un
coloriage des n
uds. C'est l'idée des arbres bicolores (ou rouges et
noirs), qui sont des sont des arbres binaires de recherche
approximativement équilibrés introduits par Bayer en 1972.
Un arbre bicolore est une arbre binaire de
recherche dont les nuds sont colorés en rouge ou en noir et
vérifiant les propriétés suivantes :
Les arbres bicolores forment la base des implémentations TreeSet TreeMap des interfaces Set et Map du paquet java.util de Java 2.