首页 > 代码库 > 二叉排序树(BST)

二叉排序树(BST)

二叉排序树(BST) 二叉排序树是空树或者是满足如下性质的树

(1)若它的左子树不空,则左子树上所有关键字的值均小于关键字的值

(2)若它的右子树不空,则右子树上所有关键字的值均大于跟关键字的值。

(3)左右子树各是一颗二叉排序树。

说明: 在二叉排序树中插入关键字均为在新建的叶子上,由于找的的插入位置总是空指针域上。

因此,在空指针域上连接一个新结点必为叶子结点

#define LOCAL#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;typedef int ElemType;const int maxSize=10000;typedef struct BTNode{    ElemType key;    struct BTNode *lChild;    struct BTNode *rChild;}BTNode;/*插入关键字算法二叉排序树是一个查找表,插入一个关键字首先要找到插入位置,对于不存在于二叉树种的关键字,其查找不成功的位置即为关键字的插入位置。*/int BSTInsert(BTNode *&bt,int key){    if(bt==NULL)    {        bt=(BTNode *)malloc(sizeof(BTNode));        bt->lChild=bt->rChild=NULL;        bt->key=key;        return 1;    }    else    {        if(key==bt->key)        {            return 0;        }        else if(key<bt->key)        {            return BSTInsert(bt->lChild,key);        }        else        {            return BSTInsert(bt->rChild,key);        }    }}BTNode* BSTSearch(BTNode *bt,int key){    if(bt==NULL)    {        return NULL;    }    else if(bt->key==key)    {        return bt;    }        else if(key<bt->key)    {        return BSTSearch(bt->lChild,key);    }    else    {        return BSTSearch(bt->rChild,key);    }}/*建立二叉排序树是,只要建立一颗空树,然后将关键字逐个插入到空树中,即可构造一颗二叉排序树,算法如下:假设关键字已存入数组key[],且下标是从1开始。*/void CreateBST(BTNode *&bt,int key[],int n){    int i=0;    bt=NULL;    for(i=1;i<=n;i++)    {        BSTInsert(bt,key[i]);    }}int SearchR(int R[],int k,int n){    int flag=0;    for(int i=0;i<n;i++)    {        if(R[i]==k)        {            flag=1;            break;        }    }    return flag;}int main(){#ifdef LOCAL    freopen("data.in","r",stdin);    freopen("data.out","w",stdout);#endif        int R[maxSize],n,i,key;    BTNode *bt,*search;    cin>>n;    for(i=0;i<n;i++)    {        cin>>R[i];    }      CreateBST(bt,R,n);    cin>>key;    search=BSTSearch(bt,key);    if(search!=NULL)    {        cout<<search->key<<endl;    }    else    {        cout<<"0\n";    }    //查数组找验证二叉排序树执行结果是否正确     if(SearchR(R,key,n))    {        cout<<key<<endl;        }    else{        cout<<"0\n";    }    return 0;}

 

二叉排序树(BST)