3.2 树的查找
树的基本操作之一就是查找,它分为两类:静态查找和动态查找。
- 静态查找: 查找的同时集合中的记录没有删除和插入操作
- 动态查找: 查找的同时集合中的记录有删除和插入操作
静态查找
顺序查找
新概念引入“哨兵”。
int SequentialSearch(StaticTable *Tab,Element X){
int i;
Tab->tab[0]=X; /*建立哨兵*/
for(i=Tab->Length;Tab[i]!=X;i--);
retrurn i;/*找到返回序号。找不到返回哨兵位置 :0 */
}
静态查找
二分查找
要求数据已经从小到大排列。
二分查找是先比较中间数与目标数的位置关系,再根据位置关系不断调整左右边界的位置,直到左右边界都指向同一数,即目标数。
int BinarySearch(StaticTable *Tbl,Element X){
int Left,Mid,Right,NoFound=-1;
Left=1;
Right=Tbl->Length;
while(Left!=Right){
Mid=(Left+Right)/2;
if(X>Tbl->Data[Mid]){
Left=Mid+1;
}else if(X<Tbl->Data[Mid]){
Right=Mid-1;
}else{
return Mid;
}
}
return NotFound;
}