再来个检索树:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int valuetype;
typedef int element_type;
typedef struct Bnode
{ element_type data;
struct Bnode *Lson, *Rson;
int layer,height;
} Bnode, *Bptr;
void insert(element_type x,Bptr &p)
{
if(p==NULL)
{
p=new Bnode;
p->data=x;
p->Lson=p->Rson=NULL;
return;
}
if(x<=p->data)insert(x,p->Lson);
else insert(x,p->Rson);
}
Bptr creat()
{
Bptr root; element_type x;
root=NULL;
scanf("%d",&x);
while(x!=0)
{
insert(x,root);
scanf("%d",&x);
}
return root;
}
int zhongxu(Bptr p)
{
if(p==NULL) return 0;
zhongxu(p->Lson);
printf("%d ",p->data);
zhongxu(p->Rson);
}
int xianxu(Bptr p)
{
if(p==NULL) return 0;
printf("%d ",p->data);
zhongxu(p->Lson);
zhongxu(p->Rson);
}
Bptr search(int x,Bptr p)
{
if(p==NULL) return NULL;
if(x==p->data) return p;
if(x<p->data) return search(x,p->Lson);
else return search(x,p->Rson);
}
int deleteT(element_type x,Bptr root)
{
Bptr f,p,q,s,r;
p=NULL;
f=root;
q=root->Rson;
while(q!=NULL)
if(x==q->data){
p=q;
q=NULL;
}
else if(x<q->data){
f=q;q=q->Lson;
}
else{f=q;q=q->Rson;
}
if(p==NULL) return 0;
if(p->Rson==NULL)
if(p==f->Lson){
f->Lson=p->Lson;free(p);
}
else{f->Rson=p->Lson;free(p);
}
else
if(p->Lson==NULL)
if(p==f->Lson){f->Lson=p->Rson;free(p);
}
else{f->Rson=p->Rson;free(p);
}
else{
s=p->Lson;
if(s->Rson==NULL)
{
p->data=s->data;
p->Lson=s->Lson;
free(s);
}
else{
r=s->Rson;
while(r->Rson!=NULL){
s=r;r=r->Rson;
}
p->data=r->data;
s->Rson=r->Lson;
free(r);
}
}
return 1;
}
int main() //24 14 39 21 16 32 0
{
int i,j,t,x;
Bptr root;
printf("请输入元素值序列(以0结尾)\n");
root=creat();
printf("当前树的先序序列和中序序列为:\n");
xianxu(root);
printf("\n");
zhongxu(root);
printf("\n");
printf("请选择要使用的功能:1、插入 2、删除 3、查找\n");
scanf("%d",&t);
if(t==1)
{
printf("请输入要插入的值:\n");
scanf("%d",&x);
insert(x,root);
printf("插入后的中序序列为:\n");
zhongxu(root);printf("\n");
}
if(t==2)
{
printf("请输入要删除的值:\n");
scanf("%d",&x);
deleteT(x,root);
printf("删除后的中序序列为:\n");
zhongxu(root);printf("\n");
}
if(t==3)
{
printf("请输入要查找的值:\n");
scanf("%d",&x);
search(x,root);
}
}