优先查找树(priority search tree)适于解决动态的已知区间集合的区间查询问题。此问题
间接地借助以下1.5维查询问题来解:已给平面土的点集5,对给定的x1,x2和y列举出S中所有包
含在矩形R = [x1,x2]×[0,y] 中的点,如图所示。此处S是动态的,要求增删方便,这要求对不
同的查询矩形R反复多次查询。
优先查找树的地规定以具体如下:
(I)跟结点对应于y 坐标最小的点(x0,y0) 作一垂直线x = x' ,
将水平线y = y0以上部分分成两个子域,使左右于域中点数之差不超过1,
x’值称为分界值(discriminator)。将点(x0,y0)和x’值标在根结点上。
(2)左右于树分别为水平线y=y0以上左右子域的优先查找树。
图(b)为图(a)所示点集的优先查找
树,为了对应起见,此处将树画成根结点在下其他结点陆
续向上的形式,树的各个结点除了标明所对应的结定点以外、括号中数字为
相应的分界值。
优先查找树可称为一种“共生“的数据结构,其特点为:对S中各点的y坐标来说,
树中任一结点的值不大于其子结点的值,这种结构称为一个堆(heap),因此从根结点起
向上的每一条路径相当于一个优先队列;对于分界值来说,此树相当于一个平衡二又树.
如果点分界值为x’,则其左于树各结点的值均小于x’,右子树各结点的值均大于x’,且
左右于树高度之差不超过l,显然,n个结点的优先查找树高度为O(log(n)),故插人删
除运算的时间复杂性为0〔log(n)).其占用空间为0(n)。
列举点集S中所有包含在查询矩形R = [x1,x2]×[0,y]中的点,是利用优先
查找树从根结点起向上进行深度优先搜索(Depth-first-search).由每结点相应的分界值和
其对应点的x,y坐标,判断该结点相应的子域中是否有包含于R中的点,当确信无R中的
点时.则回溯(backtracking)搜索其他分枝。图(b)的例子中,标以星号*的
为列举的点.此搜索过程的时间复杂件为0(logn+k),其中k为列举出的R中的点数。