Ordine
Le chiavi restano organizzate come in qualsiasi BST; l’in-order è crescente.
Algoritmi · Strutture dati bilanciate
Un albero rosso-nero è un albero binario di ricerca che limita lo sbilanciamento usando colori, ricolorazioni e rotazioni. Non è perfettamente bilanciato, ma garantisce altezza logaritmica.
Un BST costruito inserendo chiavi ordinate può degenerare in una catena alta n. Un albero rosso-nero conserva la proprietà BST e impone vincoli sui colori lungo i cammini: nessun cammino può diventare più del doppio di un altro.
Le chiavi restano organizzate come in qualsiasi BST; l’in-order è crescente.
Ogni nodo aggiunge un solo bit logico: rosso oppure nero.
Dopo una modifica bastano ricolorazioni e un numero costante di rotazioni.
Ogni nodo è rosso oppure nero.
La radice è nera.
Ogni foglia NIL, cioè ogni puntatore vuoto, è nera.
Un nodo rosso ha padre e figli neri: non esistono due rossi consecutivi.
Da un nodo a ogni NIL discendente passa lo stesso numero di nodi neri: la black-height.
Ogni nuova chiave entra rossa. Avanza passo passo per vedere quale violazione compare e come ricolorazioni e rotazioni la spostano o la eliminano.
BST-insert(z); z.color ← REDwhile color(parent(z)) = RED if color(uncle(z)) = RED: recolor and move z up else if z is an inner child: rotate parent(z) recolor parent and grandparent rotate grandparent(z)root.color ← BLACKPadre e zio diventano neri, il nonno diventa rosso e z risale al nonno. La violazione può propagarsi verso la radice.
z è figlio interno. Una rotazione sul padre trasforma il triangolo in una linea, riconducendo al caso successivo.
Il padre diventa nero, il nonno rosso e una rotazione sul nonno elimina la coppia rosso–rosso.
I casi destra–sinistra sono immagini speculari dei casi sinistra–destra. Il simulatore descrive esplicitamente la direzione scelta.
Contrai ogni nodo rosso nel suo padre nero. Per la regola rosso–rosso ogni nodo nero assorbe al massimo due figli rossi; per la black-height l’albero risultante ha tutti i cammini della stessa lunghezza. Ne segue:
h ≤ 2 log₂(n + 1)
| Operazione | Tempo peggiore | Nota |
|---|---|---|
| Ricerca | Θ(log n) | Segue un solo cammino. |
| Inserimento | Θ(log n) | Ricerca + fix-up; al massimo 2 rotazioni. |
| Eliminazione | Θ(log n) | Ricerca + fix-up; al massimo 3 rotazioni. |
| Spazio per nodo | Θ(1) | Colore e puntatori. |
Eliminare un nodo rosso non cambia la black-height. Eliminare un nodo nero, invece, sottrae un nero ai cammini che lo attraversavano: l’algoritmo rappresenta temporaneamente il deficit come “doppio nero” e lo risolve esaminando fratello e nipoti. I casi sono più numerosi, ma usano gli stessi strumenti: ricolorazioni e rotazioni.