二叉排序树的简单实现

来源:互联网 发布:社工数据库 编辑:程序博客网 时间:2024/05/01 14:04

   今天实现下二叉排序树的算法,为学习avl,rbt,做好准备,那我们就开始吧,。

#include "iostream"using namespace std;typedef struct _BitNode{    int data;    struct _BitNode *lchild,*rchild;}BitNode,*BiTree;//搜索元素,参数:(0: 根节点,1: 查找的元素,2: 找到目标元素的前一个节点指针,初始值为0// 3:找到元素的指针) bool SearchBST(BiTree T,int key,BiTree pre,BiTree&n) {     if(!T)     {         n=pre;         return false;     }     else if(key==T->data)     {         n=T;         return true;     }     if(key<T->data)         SearchBST(T->lchild,key,T,n) ;     else     {         SearchBST(T->rchild,key,T,n);     } } //插入元素 bool InsetBST(BiTree &T,int k) {     BitNode* p;     if(!SearchBST(T,k,NULL,p))     {   BitNode * temp=new BitNode;         temp->data=k;         temp->lchild=temp->rchild=NULL;         if(!p)         {           T=temp;          }         else         {             if(k<p->data)                 p->lchild=temp;             else             {                 p->rchild=temp;             }         }         return 0;     }     else      {         return false;     } } //中序遍历并输出元素 void InorderReverse(BiTree T) {     if(T)     {         InorderReverse(T->lchild);         cout<<T->data<<endl;         InorderReverse(T->rchild);     } } //从树种删除元素,分三种情况1,删除的元素只有右子树,2 只有左子树,3 有左右子树 void Delete(BiTree&T) {     BitNode*s,*p;     if(T->rchild==NULL)     {   s=T;                 T=T->lchild;          free(s);     }     else if(T->lchild==NULL)     {         s=T;                 T=T->rchild;          free(s);     }     else     {         p=T;         s=T->lchild;         while (s->rchild)         {             p=s;             s=s->rchild;         }         T->data=s->data;         if(p!=T)         {             p->rchild=s->lchild;         }         else              p->lchild=s->lchild;         free(s);     } } bool DeleElement(BiTree&T,int key) {             if(!T)          {              return 0;          }         if(T->data==key)         {             Delete(T);             return 1;         }         if(key<T->data)            DeleElement(T->lchild,key);         else             DeleElement(T->rchild,key);     } int main(){    BiTree tree=NULL;    int a[]={62,88,58,47,35,73,51,99,37,93};    for(int i=0;i<10;i++)        InsetBST(tree,a[i]);    InorderReverse(tree);    cout<<"             "<<endl<<endl;    DeleElement(tree,62);    InorderReverse(tree);    return 0;}

原创粉丝点击