C++代码,数据结构-二叉排序树

来源:互联网 发布:mac系统能做什么 编辑:程序博客网 时间:2024/06/11 23:00

排序二叉树的建立,遍历,,,利用排序二叉树来进行排序

#include<iostream>#include<fstream>#include<cstdlib>#include<queue>using namespace std;//排序二叉树的建立,遍历,,,利用排序二叉树来进行排序 struct Binode{     int data;     Binode *lchild,*rchild;};typedef Binode* Bitree;//从空树出发,经过一系列的查找插入操作之后,可生成一棵排序二叉树bool Searchbit(Bitree T,int key,Bitree f,Bitree &p){//查找操作//在T所指的二叉树中寻找,若找到等于key的元素,返回true,p指向改结点//否则,p指向访问的最后一个结点,返回false。 f指向T的双亲,初始调用为NULL..用到递归if(!T){p=f; return false;}//若T为空,p指向双亲f。返回falseelse if(key==T->data){p=T;return true;}//查找成功else if(key<T->data){ return Searchbit(T->lchild,key,T,p);}//在左子树继续查找else return Searchbit(T->rchild,key,T,p);//在右子树继续查找}bool Insertbit(Bitree &T,int e){//插入操作    //先利用查找,若不存在则插入,否则返回falseBitree p;if(!Searchbit(T,e,NULL,p)){    Bitree tem=new Binode;    tem->data=e; tem->lchild=tem->rchild=NULL;    if(!p) T=tem; //被插入点为根节点    else if(e<p->data)p->lchild=tem;//被插入点为左孩子    else p->rchild=tem;//右孩子}else    return false;}void vist(int c){cout<<c<<"   ";}void Midtravel(Bitree T){//中序遍历,即顺序输出一个有序数列        if(T){            Midtravel(T->lchild);            vist(T->data);            Midtravel(T->rchild);        }}//删除操作bool deletes(Bitree&p){//删除结点p,并重接它的孩子,三种情况。if(!p->rchild){//    Bitree tem;    tem=p;    p=p->lchild;}else if(!p->lchild){    Bitree tem;    tem=p;    p=p->rchild;    delete tem;}else{        Bitree q=p,s=p->lchild;while(s->rchild){ q=s;s=s->rchild;  }p->data=s->data;if(q==p){    q->lchild=s->lchild;}else{q->rchild=s->lchild;}}}bool Deletebit(Bitree &T,int key){if(!T)return false;else{ if(T->data==key){return deletes(T);}    else if(key<T->data)return Deletebit(T->lchild,key);        else return Deletebit(T->rchild,key);}}int main(){    int x;Bitree T=NULL;//先设为空,不然会出错while(cin>>x){    Insertbit(T,x);}cin.clear();Midtravel(T);//输出序列cout<<"请输入要删除的数"<<endl;cin>>x;Deletebit(T,x);Midtravel(T);return 0;}

运行结果


0 0
原创粉丝点击