第7章课后习题算法设计题(严蔚敏数据结构c语言版第2版)

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);
    }
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值