首页 > 代码库 > 二叉排序树(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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。