10个结点的判定树如下:
对于此图,我么可以得出:因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。对于那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。但是链表无法是实现二分查找。
二分查找树的代码实现:
#include<iostream> #include <list> #include <algorithm> using namespace std; int Two_Find(int *data,int n,int findnum) { int high=n-1; int low=0; int mid; while(low<=high) { mid=(low+high)/2; if(data[mid]==findnum)//找到; { return findnum; } else//没找到; { if(findnum < data[mid])//要找的数在根节点的左边; high=mid-1; else low=mid+1; } } return -1; } int main() { int data[10]={1,2,3,4,5,6,7,8,9,11}; int number=Two_Find(data,10,12); if(number<0) { cout<<"NO exist"<<endl; } else { cout<<number<<"is exist!"<<endl; } system("pause"); return 0; }