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
即可。