您的位置: 网站首页 > 程序开发 > 数据结构 > 第7章 查找 > 【7.8 上 机 实 验】

7.8 上 机 实 验

 

7.8 

7.8.1  实验内容

1)设计一个算法,求出给定二叉排序树中最小和最大的关键字,并上机实现。

2)设计一个算法,求出指定节点在二叉排序树中的层次,并上机实现。

3)顺序表的类型定义为:

typedef {int key; float info;} sqlist;

请给出对分法查找的递归算法,并上机实现。

7.8.2  实验指导

1)一棵二叉排序树的最左下节点即为关键字最小的节点。一棵二叉排序树的最右下节点即为关键字最大的节点。对应的算法如下:

KeyType MinKey(BSTNode *bt)                         /*求最小关键字*/

{

    while(bt->lchild!=NULL)

        bt=bt->lchild;

    return(bt->key);

}

KeyType MaxKey(BSTNode *bt)                         /*求最大关键字*/

{

    while(bt->rchild!=NULL)

        bt=bt->rchild;

    return(bt->key);

}

void MinMaxKey(BSTNode *bt,KeyType &min,KeyType &max)

/*求最小、最大关键字*/

{

    min=MinKey(bt);

    max=MaxKey(bt);

}

2)采用循环语句边找边累计层次n。当找到关键字为k的节点时返回n;否则返回0。算法如下:

int Level(BSTNode *bt,KeyType k)

{

    int n=1;

    BSTNode *p=bt;

    while(p!=NULL && p->key!=k)

    {  

            if(k<p->key)

            p=p->lchild;                        /*在左子树中查找*/

        else

            p=p->rchild;                        /*在右子树中查找*/

        n++;                                    /*层数增1*/

    }

    if(p!=NULL)

        return n;

    else

        return(0);                              /*表示未找到*/

}

3)对分法查找的递归算法描述如下:

int Bsearch(sqlist r[ ],int i,int j,int k)

{

int m;

if (i>j)return(-1);

else

{

m=(i+j)/2;

if(r[m].key==k)

return m;

if(r[m].key<k)

return(Bsearch(r,i,m-1,k));

else

return(Bsearch(r,m+1,j,k));

}

}