二叉排序树

xiaoxiao2021-02-28  23

一个关于化妆品价格的二叉排序树,中间有一部分自己不会敲,借鉴的其他博主的一些思想。 希望大家还是主要看思想,具体细节如有更好的建议欢迎留言,本人小白一枚,希望得到大家的批评

/* 李书豪 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; } } }
转载请注明原文地址: https://www.6miu.com/read-2400080.html

最新回复(0)