二叉搜索树一个很广泛的应用是查找问题
解决查找问题的一个基本解法是二分查找法 Binary Search
对于有序数列,才能使用二分查找法
如上图所示,首先找到数列的中间元素,如果等于要查找的元素,查找就停止,
如果不等于,判断是大于中间元素还是小于中间元素,大于的话就对右边数列继续切分查找,
如果小于就对左边数列继续切分查找,直到中间位置的元素等于查找元素位置
下面是程序实现
#include <iostream>
using namespace std;
//二分查找法,在有序数组arr中,查找target
//如果找到target,返回相应的索引index
//如果没有找到target,返回-1
template<typename T>
int binarySearch(T arr[], int n, T target){
//在arr[l...r]中查找target
int l = 0;
int r = n - 1;
while (l <= r){
mid = l + (r - l)/2; //防止数组越界,不使用(l+r)/2
if (arr[mid] == target)
return mid;
if (arr[mid] < target)
//在arr[mid+1...r]中查找target
l = mid + 1;
else // arr[mid] > target
//在arr[l...mid-1]中查找target
r = mid - 1;
}
return -1;
}
int main()
{
return 0;
}