Nếu với mỗi nút của cây, đường dẫn dài nhất từ nút đến nút lá dài hơn không quá hai lần so với nút ngắn nhất, thì cây có màu đỏ đen.
Đây là một thuật toán để tìm ra màu của bất kỳ nút nào 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
Đây n.black-quota
là số lượng nút đen mà bạn mong đợi sẽ thấy một chiếc lá, từ nút n
và n.min-height
là khoảng cách đến chiếc lá gần nhất.
Để cho ngắn gọn của ký hiệu, hãy để , và .h ( n ) = m ( n ) =b(n)= n.black-quota
h(n)= n.height
m(n)= n.min-height
Định lý: Sửa chữa một cây nhị phân . Nếu với mọi nút , và cho nút , thì có màu đen đỏ với các nút đen chính xác trên mọi đường dẫn từ gốc đến lá.n ∈ T h ( n ) ≤ 2 m ( n ) r = gốc ( T ) b ( r ) ∈ [ 1Tn∈Th(n)≤2m(n)r=root(T)Tb(r)b(r)∈[12h(r),m(r)]Tb(r)
Chứng minh: Cảm ứng trên .b(n)
Xác minh rằng tất cả bốn cây có chiều cao một hoặc hai đều thỏa mãn định lý với .b(n)=1
Theo định nghĩa của cây đỏ-đen, gốc là màu đen. Đặt là một nút có cha mẹ đen sao cho . Khi đó , và .p b ( p ) ∈ [ 1npb(n)=b(p)-1h(n)=h(p)-1h(n)≥m(n)≥m(p)-1b(p)∈[12h(p),m(p)]b(n)=b(p)−1h(n)=h(p)−1h(n)≥m(n)≥m(p)−1
Giả sử định lý giữ cho tất cả các cây có gốc , .b ( r ) < b ( q )rb(r)<b(q)
Nếu , thì có thể có màu đỏ đen theo giả định quy nạp.nb(n)=m(n)n
Nếu thì . không thỏa mãn giả định quy nạp và do đó phải có màu đỏ. Cho là con của . và . Sau đó có thể có màu đỏ-đen theo giả định quy nạp.b(n)=⌈1b(p)=12h(p)ncnh(c)=h(p)-2b(c)=b(p)-1=1b(n)=⌈12h(n)⌉−1ncnh(c)=h(p)−2cb(c)=b(p)−1=12h(p)−1=12h(c)c
Lưu ý rằng, theo cùng một lý do, nếu , thì cả và con của thỏa mãn giả định quy nạp. Do đó có thể có bất kỳ màu nào.nnnb(n)∈(12h(r),m(r))nnn