王道c语言督学营课时15作业

#include 
#include 
//读取10个元素 87  7 60 80 59 34 86 99 21  3,
// 然后建立二叉查找树,中序遍历输出3  7 21 34 59 60 80 86 87 99,针对有序后的元素,
// 存入一个长度为10的数组中,通过折半查找找到21的下标(下标为2),然后输出2
typedef int KeyType;
typedef struct BSTNode{
    KeyType key;
    struct BSTNode *lchild,*rchild;
}BSTNode,*BiTree;
//递归实现插入二叉查找树
int BST_Insert(BiTree &T,KeyType key)
{
    if(T==NULL)
    {
        //为新节点申请空间,第一个结点作为树根,后面递归再进入的不是树根, 是为叶子结点
        T= (BiTree)calloc(1,sizeof (BSTNode));
        T->key=key;
    } else if(key==T->key)//相同元素插入失败
    {
        return 0;
    } else if(key>T->key)
    {
        return BST_Insert(T->rchild,key);
    }else
    {
        return BST_Insert(T->lchild,key);
    }
}
//创建二叉查找树
void Creat_BST(BiTree &T,KeyType*str,int len)
{
        T=NULL;//T 是树根
        int i;
        for(i=0;ilchild,str);
        printf("%3d",T->key);
        str[i++]=T->key;
        InOrder(T->rchild,str);
    }
}
//二分查找
int BinarySearch(KeyType*str,int len,int sea)
{
    int low=0;
    int high=len-1;
    while (low<=high)
    {
        int middle=(low+high)/2;
        if(sea>str[middle])
        {
            low=middle+1;
        } else if(sea

你可能感兴趣的:(数据结构)