ツリーの各ノードについて、そのノードからリーフノードへの最長パスが最短ノードの2倍以下である場合、ツリーの色は赤黒になります。
これがノードの色を計算するアルゴリズムです 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
ここでn.black-quota
あなたがノードから、葉に行く見て期待黒のノードの数であるn
とn.min-height
最寄りの葉までの距離です。
b(n)= n.black-quota
h(n)= n.height
m(n)= n.min-height
Tn∈Th(n)≤2m(n)r=root(T)b(r)∈[12h(r),m(r)]Tb(r)
b(n)
b(n)=1
npb(p)∈[12h(p),m(p)]b(n)=b(p)−1h(n)=h(p)−1h(n)≥m(n)≥m(p)−1
rb(r)<b(q)
b(n)=m(n)n
b(p)=12h(p)b(n)=⌈12h(n)⌉−1ncnh(c)=h(p)−2b(c)=b(p)−1=12h(p)−1=12h(c)c
b(n)∈(12h(r),m(r))nnn