二叉排序树的查找
第1关:顺序查找
/*************************************************************
顺序查找 实现文件
更新于2020年6月23日
**************************************************************/
int Search_Seq(SSTable L, KeyType key)
{/*在静态查找表L中采用顺序查找法,查找其关键字等于key的记录,若找到返回该记录在表中位置,否则返回0*/
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int i = 0 ;
while(i<L.length&&key!=L.r[i].key)
i++;
if(L.r[i].key==key)
return i;
else
return 0;
/*
从第一位开始查找,直至数组结束或遇到第一个key值
退出循环
判断退出原因
找到key -- 返回下标【从0开始】
否则 -- 返回0
*/
/********** End **********/
}
第2关:折半查找
/*************************************************************
折半查找 实现文件
更新于2020年6月17日
**************************************************************/
int Search_Bin(SSTable L, KeyType key)/*在递增有序的顺序表L中折半查找其关键字等于key的记录*/
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int mid, low = 0,high = L.length;
//设定初始查找范围,注意此处high初始值为L.length而不是L.length-1
while(low<=high)
{
mid= (high + low)/2;
if(key == L.r[mid].key)//找到返回key值下标
return mid;
if(key < L.r[mid].key)//中间值大于待查值--范围前缩
high = mid - 1;
if(key > L.r[mid].key)//中间值小于待查值--范围后缩
low = mid + 1;
}
return 0;//找不到要返回0 -- not find!
/********** End **********/
}
第3关:二叉排序树的查找
/*************************************************************
二叉排序树的查找 实现文件
更新于2020年7月5日
**************************************************************/
BiTree Search_BST(BiTree T, KeyType key, BiTNode **parent)
{/*在二叉排序树T上查找其关键字等于key的记录结点。若找到返回该结点指针,parent指向其双亲;否则返回空指针,parent指向访问路径上最后一个结点。*/
// 请在这里补充代码,完成本关任务
/********** Begin *********/
///parent 指向一个存放树根地址的指针
/*
if(T!=NULL)
{
if(key==T->data.key)
return T;
*parent = T;//改变parent true
//parent = &T;error
if(key<T->data.key)
return Search_BST(T->lchild, key,parent);
if(key>T->data.key)
return Search_BST(T->rchild, key,parent);
}
else
return NULL;
*/
if(!T||key==T->data.key)
return T;
/*
由 !T 进入if分支
说明T为空,此时直接返回T也可达到返回空的效果
*/
else
{
*parent = T;
if(key<T->data.key)
return Search_BST(T->lchild, key,parent);
else
return Search_BST(T->rchild, key,parent);
}
/********** End **********/
}