7-1 试写出折半查找的递归算法
#include <iostream>
using namespace std;
int Search_Bin(int key[],int low, int high,int k);
int main()
{
int length,address;
cout<<"请输入关键字数组的长度:";
cin>>length;
int key[length];
cout<<"请输入"<<length<<"个关键字(不能有小于或等于0的关键字):";
for(int i=0;i<length;i++){
cin>>key[i];
}
for(int i=0;i<length;i++){
address=Search_Bin(key,0,length-1,key[i]);
cout<<"元素"<<key[i]<<"的地址为:"<<address<<endl;
}
int x=1;
while(x>0){
cout<<"请输入要查找的元素(输入小于或等于0结束查找):";
cin>>x;
if(x>0){
address=Search_Bin(key,0,length-1,x);
if(-1!=address)
cout<<"元素"<<x<<"的地址为:"<<address<<endl;
else
cout<<"元素"<<x<<"查找失败"<<endl;
}else{
cout<<"元素小于或等于0,结束查找"<<endl;
break;
}
}
return 0;
}
int Search_Bin(int key[],int low, int high,int k)
{
int mid;
if(low>high)
return -1;
else{
mid=(low+high)/2;
if(key[mid]==k)
return mid;
if(k>key[mid])
return Search_Bin(key,mid+1,high,k);
else
return Search_Bin(key,low,mid-1,k);
}
}
7-2 试写出一个判别给定二叉树是否为二叉排序树的算法
#include<iostream>
using namespace std;
#define Max 100
int key[Max];
int count=0;
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void Judge(BiTree T);
void CreatBiTree(BiTree &T);
void InOrderTraverse(BiTree T);
int main(){
BiTree T1;
cout<<"先序建立二叉树(-1代表空结点):"<<endl;
CreatBiTree(T1);
cout<<"中序遍历二叉树为:";
InOrderTraverse(T1);
Judge(T1);
count=0;
BiTree T2;
cout<<"先序建立二叉树(-1代表空结点):"<<endl;
CreatBiTree(T2);
cout<<"中序遍历二叉树为:";
InOrderTraverse(T2);
Judge(T2);
return 0;
}
//中序遍历
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
key[count]=T->data;
cout<<key[count]<<" ";
count++;
InOrderTraverse(T->rchild);
}
}
//判断是否为排序二叉树:利用中序遍历保存关键字数组,
// 若不是递增就不是排序二叉树
void Judge(BiTree T){
cout<<"\n该二叉树的结点个数为:"<<count<<endl;
for(int i=0;i<count-1;i++){
if(key[i]>key[i+1]){
cout<<"不是排序二叉树"<<endl;
break;
}else if(key[i]<key[i+1] && i==count-2){
cout<<"是排序二叉树"<<endl;
}
}
}
//先序建立二叉树
void CreatBiTree(BiTree &T){
int x;
cin>>x;
if(x==-1){
T=NULL;
}else{
T=new BiTNode;
T->data=x;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}