Educoder头歌数据结构-二叉排序树的查找

二叉排序树的查找

第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(keydata.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 **********/	
}

你可能感兴趣的:(头歌educoder答案,数据结构,链表,r语言)