二叉排序树(插入、删除、查找)
来源:互联网 发布:手机淘宝买东西流程 编辑:程序博客网 时间:2024/06/05 08:01
#include<stdio.h>#include<stdlib.h>typedef struct elem{ int key;}elem;typedef struct node{ elem data; struct node* lchild,*rchild;}*Bitree,Binode;int Search(Bitree T,int key){if (!T){printf("查找失败\n");return 0;}else{if (T->data.key==key){printf("查找成功\n"); return 1;}else if (T->data.key<key)Search(T->rchild,key);elseSearch(T->lchild,key);}return 0;}void Insert(Bitree &T,int data){Bitree s;if (!T){ s=(Bitree)malloc(sizeof(Binode)); s->data.key=data; s->lchild=s->rchild=NULL; T=s;}else if (T->data.key<data)Insert(T->rchild,data);elseInsert(T->lchild,data);}void Dele(Bitree &T,int key){Bitree pre,p,q; p=T; while (p&&p->data.key!=key) { if (p->data.key<key) { pre=p;p=p->rchild; } else { pre=p;p=p->lchild; } } if (!p) { printf("无此值\n");return; } if (!p->lchild)//左子树为空 { if (p==T) T=T->rchild; else if (pre->rchild==p) pre->rchild=p->rchild;else pre->lchild=p->rchild;free(p); } else if (!p->rchild)//右子树为空 { if (p==T) T=T->lchild; else if (pre->lchild==p)pre->lchild=p->lchild;elsepre->rchild=p->lchild;free(p); } else//不用判断删除根结点 { pre=p;q=p->lchild; while (q->rchild) { pre=q;q=q->rchild; } p->data.key=q->data.key; if (pre!=p) pre->rchild=q->lchild; else pre->lchild=q->lchild; free(q); }}void Preorder(Bitree T){if (T){ printf("%d ",T->data.key); Preorder(T->lchild); Preorder(T->rchild);}}void Inorder(Bitree T){ if (T) { Inorder(T->lchild); printf("%d ",T->data.key); Inorder(T->rchild); }}void Creat(Bitree &T){int data; T=(Bitree)malloc(sizeof(Binode));T=NULL;scanf("%d",&data);while (data){ Insert(T,data); scanf("%d",&data);}}int main(){int a,data;Bitree T;printf("建树,输入0结束:\n");Creat(T);printf("\n");while (1){printf("选择操作:\n1.查找\n2.插入结点\n3.删除节点\n4.前序遍历输出\n5.中序遍历输出\n6.退出\n\n");scanf("%d",&a);switch (a){case 1:{ printf("输入要查找的值:\n"); scanf("%d",&data); Search(T,data); break; }case 2:{ printf("输入要插入的结点:\n"); scanf("%d",&data); Insert(T,data); break; }case 3:{printf("输入要删除的结点:\n"); scanf("%d",&data); Dele(T,data); break;}case 4: { Preorder(T); printf("\n"); break;}case 5: { Inorder(T); printf("\n"); break;}case 6: return 0;}//switch}//whilereturn 0;}
0 0
- 二叉排序树(插入、删除、查找)
- 二叉排序树查找、插入、删除
- 二叉排序树(概念,查找,插入,删除)
- 二叉排序树的查找(插入、删除)
- 二叉排序树的查找、删除、插入
- 二叉排序树_插入+删除+查找
- 二叉排序树的插入,查找,删除
- 二叉排序树的查找-插入-删除
- 树形结构的查找(二叉排序树-创建、查找、插入、删除)
- 二叉排序树(新建,插入,查找,删除)(C语言编写)
- 二叉排序树的操作(建立、插入、删除和查找)
- 二叉查找树(二叉排序树)创建,插入,删除操作。
- 二叉排序树的相关操作(插入,查找,删除,遍历等)
- 二叉排序树的查找、插入与删除算法
- 二叉排序树的查找、插入、删除、建立
- Java实现二叉排序树的插入、查找、删除
- 二叉排序树的查找、插入和删除
- 二叉排序树的创建,查找,插入,删除
- linux-系统调用01-strace工具的使用
- Struts2学习——(二)开发实例-我的第一个Struts2工程
- 导入某些特殊Jar包中的类
- vim背景色molokai配置
- GDB十分钟教程
- 二叉排序树(插入、删除、查找)
- NOIP2015总结
- 在Linux或mac上配置github提交代码到github仓库
- find命令的xargs参数的使用---Linux学习笔记
- 设计模式之--代理模式
- json数据解析总结
- SJTU-ACM-1528
- install jekyll
- 使用Maven构建Java web项目