一个关于化妆品价格的二叉排序树,中间有一部分自己不会敲,借鉴的其他博主的一些思想。
希望大家还是主要看思想,具体细节如有更好的建议欢迎留言,本人小白一枚,希望得到大家的批评
/*
李书豪
2017.11.25
要求:建立一个由多种化妆品品牌价格组成的二叉排序树,并按照价格从低到高的顺序打印输出。
*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct odds
{
struct odds *lchild,*rchild;
int data;
}*odds,odd;
void insert(odds od,int data) //插入操作
{
odds p,s,parent;
p=od;
while(p);
{
if(data<p->data);
{
parent=p;
p=p->lchild;
}
else if(data>p->data)
{
parent=p;
p=p->rchild;
}
else
{
return ;
}
}
s=(odds)malloc(sizeof(odd));
s->data=data;
s->lchild=s->rchild=NULL;
if(s->data<parent->data)
parent->lchild=s;
else
parent->rchild=s;
}
odds initodd(odds od,int n) //插入法赋值
{
int data;
printf("请输入第一个化妆品价格!\n");
scanf("%d",&data);
od=(odds)malloc(sizeof(odd));
od->data=data;
od->lchild=od->rchild=NULL;
printf("请输入剩余化妆品的价格:\n");
for(int i=1;i<n;i++)
{
scanf("%d",&data);
insert(od,data);
}
}
void inorder(odds od) //中序遍历
{
if(!od)
return ;
inorder(od->lchild);
printf("化妆品的价格为%d",od->data);
inorder(od->rchild);
}
int find(odds od,int key) //查找化妆品的价格;
{
odds p;
p=od;
while(p)
{
if(key<p->data)
p=p->lchild;
else if(key>p->data)
p=p->rchild;
else
{
printf("%d的化妆品查找成功!\n",key);
return 1;
}
}
printf("未找到数据%d。\n",key);
return 0;
}
void del(odds od,int key)
{
odds p,cur,par;
p=od;
while(p)
{
if(key==p->data)
break;
else if(key<p->data)
{
par=p;
p=p->lchild;
}
else
{
par=p;
p=p->rchild;
}
}
if(!p)
{
printf("该二叉树为空!\n");
return ;
}
if(!p->lchild) //没有左子树
{
if(p==od)
od=p->rchild;
else if(par->lchild==p)
par->lchild=p->rchild;
else
par->rchild=p->lchild;
free(p);
}
}
void main()
{
int n,key,select;
odds od;
while(1)
{
printf("-----------------\n");
printf("1、建立一个化妆品价格的二叉排序树\n");
printf("2、输出中序遍历结果\n");
printf("3、查找数据是否存在\n");
printf("4、删除数据\n");
printf("5、插入数据\n");
printf("6、退出\n");
printf("------------------\n");
printf("请输入你想要进行的操作:\n");
scanf("%d",&select);
switch(select)
{
case 1:
printf("请输入一共有多少个化妆品:\n");
scanf("%d",&n);
initodd(od,n);
break;
case 2:
printf("中序遍历的结果为:\n");
inorder(od);
printf("\n");
break;
case 3:
printf("请输入要查找的关键字:\n");
scanf("%d",&key);
find(od,key);
break;
case 4:
printf("请输入要删除的关键字:\n");
scanf("%d",&key);
del(od,key);
case 5:
printf("请输入要插入的数据:\n");
scanf("%d",&key);
insert(od,key);
printf("插入成功!\n");
break;
default:
return 0;
}
}
}