t=add(t,key);break;
}
case 4:
{ printf("请输入所要查找的元素的key值:");
scanf("%d",&key);
searchx(t,key);break;
}
case 5:
{ display(t);
}
}
printf("************************************************\n\n\n"); }while(a!=6);
printf("GOOD BYE!!!");
}
bitnode*creat_bt()//二叉顺序树的建立
{
int k;
bitnode*t=NULL,*s,*f;
printf("请输第%d个关键字key的值(以输入0为结束):",n);
scanf("%d",&k);
while(k!=0)
{
n++;//用于记数
s=(bitnode*)malloc(sizeof(bitnode));
s->key=k;s->lch=NULL;s->rch=NULL;
if(t==NULL)t=s;
else
{
f=search(t,k);
if(k==f->key)//已存在k元素
{
printf("\n提示:已存在该元素,请重新输入");
n--;
}
else if(k<f->key)f->lch=s;
else f->rch=s;
}
printf("请输入第%d个关键字key的值(以输入0为结束):",n); scanf("%d",&k);
}
return t;
}
bitnode*search(bitnode*root,int data) //查找是data存在与否,若不存在返回待查找data的父结点指针
{
bitnode*p=NULL,*q=root;
while(q)
{
p=q;
if(data==q->key) return q;//已存在元素
data,返回data所在的位置q
else if(data<q->key)q=q->lch;
else q=q->rch;
}
return p;//返回待查找data的父结点指针
}
void searchx(bitnode*root,int data)//判断所查找的元素data是否存在,并给出相应的提示
{
bitnode*p=NULL,*q=root;
int tag=0;
while(q && tag==0)
{
p=q;
if(data==q->key)
{ tag=1;break;}//找到元素data else if(data<q->key)q=q->lch;
else q=q->rch;
}
if(tag==1)printf("\n二叉树中 存在 所查找的元素%d",data); else printf("\n二叉树中 不存在 所查找的元素%d",data);
}
bitnode*deletex(bitnode*t,int data)//在二叉树中删除key为data的结点
{ bitnode*p,*f,*s,*q;
int flag=0;
p=t;f=NULL;
while(p!=NULL)
{ if(p->key==data)
{ flag=1;break;}
f=p;
if(p->key>data)p=p->lch;
else p=p->rch;
}
if(p==NULL)
{ printf("在此二叉树中无此值,无法完成删除操作。建立二叉排序树建立二叉排序树");
return t;//无此值
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-26292-2.html
高蛋白