数据结构的扩张—算法导论第14章(194)

这里写图片描述

OS-SELECT(x,i)
int r=x.left.size+1;
if(i==r)
{
return x;
}
esle
if(i<r)
return OS-SELECT(x.left,i);
else
return OS-SELECT(X.right,i-r);

伪代码解释
为明白OS-SELECT是如何操作的,在上图所示的顺序统计图上查找第17小元素的查找过程。以X为根开始,其关键字为26。i=17.因为在26的左子树大小为12,故他的秩为13,因此,秩为17的节点是26的右子树第17-13=4小得瑟元素。递归调用后,x为关键字41的节点,i=4,因为41的左子树大小为5,故他的秩为6,这样,可以知道秩为秩为4的节点是41的左子树的第4小元素。再次递归调用后,x为关键字30的节点,在其子树中他的秩为2,如此,再进行一次递归调用,就能找到以关键字38的节点为根的子树中第4-2=2小的元素。他的左子树大小为1,这意味着他就是第2小的元素。最终,该过程返回一个指向关键字38的节点的指针。

## 确定一个元素的秩 ##
给定指向顺序统计树T中节点x的指针,过程OS-RANK返回对T中序遍历对应的线性序中X的位置。
OS-RANK(T,x)
int r=x.left.size+1;
int y=x;
while(y!=T.root)
{
if(y==y.p.right)
{
  r=r+y.p.left.size+1;
}
y=y.p;
}

return r;

伪代码解释
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值