Se per ogni nodo di un albero, il percorso più lungo da esso a un nodo foglia non è più di due volte più lungo di quello più corto, l'albero ha una colorazione rosso-nera.
Ecco un algoritmo per capire il colore di qualsiasi nodo n
if n is root,
n.color = black
n.black-quota = height n / 2, rounded up.
else if n.parent is red,
n.color = black
n.black-quota = n.parent.black-quota.
else (n.parent is black)
if n.min-height < n.parent.black-quota, then
error "shortest path was too short"
else if n.min-height = n.parent.black-quota then
n.color = black
else (n.min-height > n.parent.black-quota)
n.color = red
either way,
n.black-quota = n.parent.black-quota - 1
Ecco n.black-quota
il numero di nodi neri che ti aspetti di vedere andare a una foglia, dal nodo n
ed n.min-height
è la distanza dalla foglia più vicina.
Per brevità della notazione, sia , h ( n ) = e m ( n ) =b(n)= n.black-quota
h(n)= n.height
m(n)= n.min-height
.
Teorema: fissare un albero binario . Se per ogni nodo n ∈ T , h ( n ) ≤ 2 m ( n ) e per nodo r = radice ( T ) , b ( r ) ∈ [ 1Tn∈Th(n)≤2m(n)r=root(T)quindiTha una colorazione rosso-nera con esattamenteb(r)nodi neri su ogni percorso dalla radice alla foglia.b(r)∈[12h(r),m(r)]Tb(r)
Prova: induzione su b(n) .
Verifica che tutti e quattro gli alberi di altezza uno o due soddisfino il teorema con .b(n)=1
Per definizione dell'albero rosso-nero, la radice è nera. Sia un nodo con un genitore nero p tale che b ( p ) ∈ [ 1np. Quindib(n)=b(p)-1,h(n)=h(p)-1eh(n)≥m(n)≥m(p)-1.b(p)∈[12h(p),m(p)]b(n)=b(p)−1h(n)=h(p)−1h(n)≥m(n)≥m(p)−1
Supponiamo che il teorema valga per tutti gli alberi con radice , b ( r ) < brb(r)<b(q) .
Se , allora nb(n)=m(n)n può essere di colore rosso-nero dal presupposto induttivo.
Se quindib(n)=⌈1b(p)=12h(p). nnon soddisfa il presupposto induttivo e quindi deve essere rosso. Siacfiglio din. h(c)=h(p)-2e b(c)=b(p)-1=1b(n)=⌈12h(n)⌉−1ncnh(c)=h(p)−2. Quindicb(c)=b(p)−1=12h(p)−1=12h(c)c può essere di colore rosso-nero dal presupposto induttivo.
Si noti che, con lo stesso ragionamento, se b(n)∈(12h(r),m(r))nnn