14.2-1
對於MINIMUM
、MAXIMUM
這種屬於樹的全局屬性的可以直接修改(比如我們把哨兵結點的左右指針分別指向MINIMUM
、MAXIMUM
)。
插入時,我們比較插入的結點的關鍵字,若關鍵字小於MINIMUM
所指關鍵字,則將指向MINIMUM
的指針指向新的關鍵字,否則不變;對於刪除操作,若刪除了最小關鍵字,則將指向MINIMUM
的指針指向被刪除關鍵字的後繼,因此若能在 MINIMUM
的指針。同理,我們可以更改MAXIMUM
指針。
下面說明如何在 SUCCESSOR
、PREDECESSOR
。注意到旋轉操作並不會改變結點的SUCCESSOR
、PREDECESSOR
屬性。所以會改變SUCCESSOR
、PREDECESSOR
屬性的是插入和刪除操作。
插入時,假設會插入到結點
x.predecessor.successor = y
y.predecessor = x.predecessor
y.successor = x
x.predecessor = y
插入到結點
綜上可知可以在
14.2-2
可以將黑高作爲屬性來維護,由定理 14.1 可知,我們計算結點的黑高只需要結點的左右孩子信息。結點
對於插入操作,情況 1 中,設着色之前 RB-INSERT-FIXUP
的第七行後加入z.p.p.bh=z.p.p.bh+1
。情況 2 和 3 着色旋轉之後黑高並不改變。
對於刪除操作,情況 1 不改變黑高,情況 2 在RB-DELETE-FIXUP
的第十行後面加上x.p.bh=x.bh
即可,情況 3 也不改變黑高,情況 4 在RB-DELETE-FIXUP
的第二十行後面加上x.p.bh=x.bh+1;x.p.p.bh=x.p.bh+1
。
對於維護結點深度,我們的答案是否。
14.2-3
顯然,對於任意結點
對於一次旋轉,以右旋爲例,子樹
14.2-4
在 SUCCESSOR
即可。