二叉查找树(Binary Search Tree)是指一棵空树或者具有下列性质的二叉树:
二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低为 O ( log n ) 。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、多重集、关联数组等。
二叉查找树是能够高效地进行如下操作的数据结构。
二叉查找树满足以下条件:
声明
- typedef struct BSTNode{
- int data;
- BSTNode *lchild,*rchild;
- }BSTNode,*BSTree;
查询
若二叉查找树为空,则查找失败,返回空指针
若二叉查找树非空,则将待查找关键字key与根节点的关键字 T − > d a t a T->data T−>data进行比较:
如果x=T−> data x=T->data x=T−>data,则查找成功,返回查询到的当前节点T
如果x
如果x>T−> data x>T->data x>T−>data,则递归查找右子树
- BSTree find(BSTree T,int key)
- {
- if(!T||T->data==key)
- {
- return T;
- }
- else if(key
data) - {
- return find(T->lchild,key);
- }
- else
- {
- return find(T->rchild,key);
- }
- }
插入
- void insert(BSTree &T,int e)
- {
- if(!T)
- {
- BSTree S=new BSTNode;
- S->data=e;
- S->lchild=S->rchild=NULL;
- T=S;
- }
- else if(e
data) - {
- insert(T->lchild,e);
- }
- else if(e>T->data)
- {
- insert(T->rchild,e);
- }
- }
创建
二叉查找树的创建可以从空树开始,按照输入关键字的顺序依次进行插入操作,最终得到一棵二叉查找树。
- void build(BSTree &T)
- {
- T=NULL;
- int e;
- while(cin>>e,e!=-1)
- {
- insert(T,e);
- }
- }
删除
- void del(BSTree &T,int key)
- {
- BSTree p=T;
- BSTree f=NULL;
- BSTree q,s;
- if(!T)
- {
- return;
- }
- while(p)
- {
- if(p->data==key)
- {
- break;
- }
- f=p;
- if (p->data>key)
- {
- p=p->lchild;
- }
- else
- {
- p=p->rchild;
- }
- }
- if(!p)
- {
- return;
- }
- if((p->lchild)&&(p->rchild))
- {
- q=p;
- s=p->lchild;
- while(s->rchild)
- {
- q=s;
- s=s->rchild;
- }
- p->data=s->data;
- if(q!=p)
- {
- q->rchild=s->lchild;
- }
- else
- {
- q->lchild=s->lchild;
- }
- delete s;
- }
- else
- {
- if(!p->rchild)
- {
- q=p;
- p=p->lchild;
- }
- else if(!p->lchild)
- {
- q=p;
- p=p->rchild;
- }
- if(!f)
- {
- T=p;
- }
- else if(q==f->lchild)
- {
- f->lchild=p;
- }
- else
- {
- f->rchild=p;
- }
- delete q;
- }
- }
以上就是本文的全部内容啦!感谢阅读!