本章介绍了两种红黑树的扩张
一,动态顺序统计
秩:在集合线性序中的位置,中序遍历树时输出的位置。
顺序统计树:向红黑树的结构中添加一个size域,表示包含自身节点的当前节点的子树节点的数目。
(1)查找给定秩的元素
OS_SELECT(x,i)
r = size[left[x]]+1; //先计算x的处于的位置
if i = r //x正好是第i小的关键字
then return x;
else if i < r //x比第i关键字大,则在其左子树查找
then return OS_SELECT(left[x],i)
else return OS_SELECT(right[x],i-r) //x比第i关键字小,则在其右子树查找
(2)确定一个元素的秩
OS_RANK(T,x)
r = size[left[x]]+1; //获取以x为根子树中x的位置(中序遍历)
y = x;
while y != root[T] //从下向上直到根节点
do if y = right[p[y]] //如果是右子树
then r = r + size[left[p[y]]]+1;
y = p[y]; //向上移动
return r;
(3)对树的维护
二,如何扩张数据结构
对一种数据结构的扩张过程分为四个步骤:
1)选择基础数据结构
2)确定要在基础数据结构中添加哪些信息
3)验证可用基础数据结构上的基本修改操作来维护这些新添加的信息
4)设计新的操作
(1)对红黑树的扩张
定理14.1
三,区间树
区间树:一种对动态集合进行维护的红黑树,其中每个元素x都包含一个区间x.int。
支持操作:
INTERVAL_INSERT(T,x):将包含区间域int的元素x插入到区间树T中
INTERVAL_DELETE(T,X):从区间树T中删除元素x
INTERVAL_SEARCH(T,i):返回一个指向区间树T中元素x的指针,使int[x]与i重叠,若集合中无此元素存在,则返回nil[T]。