二叉排序树,建立,查找,删除等操作
来源:互联网 发布:复杂网络特性 编辑:程序博客网 时间:2024/06/03 06:27
/*输入互不相同的一组整数,构造一棵二叉排序树,要求:① 按递减有序的顺序输出;② 输入一个整数,查找该整数是否在该二叉排序树中,查找成功返回1,否则返回0;③ 在②中,若查找成功,则将该结点从二叉排序树中删除。*/ #include<stdio.h>#include<stdlib.h>typedef struct{int key;}ElemType;typedef struct BiTNode{ElemType data;struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;int SearchBST(BiTree T,int key,BiTree f,BiTree &p){if(!T){p=f;return 0;}else if(key==T->data.key){p=T;return 1;}else if(key<T->data.key){return SearchBST(T->lchild,key,T,p);}else return SearchBST(T->rchild,key,T,p);}int InsertBST(BiTree &T,ElemType e){BiTree s,p;if(!SearchBST(T,e.key,NULL,p)){ //查找不成功s=(BiTree)malloc(sizeof(BiTNode));s->data=e;s->lchild=s->rchild=NULL;if(!p) T=s;else if(e.key<p->data.key) p->lchild=s;else p->rchild=s;return 1;}else return 0;}void CreateBiTree(BiTree &T){ ElemType x; scanf("%d",&x.key); while(x.key){ InsertBST(T,x);//在二叉排序树中插入新结点s scanf("%d",&x.key); }}void visit(ElemType data){printf("%3d",data.key);}void Traverse(BiTree T){//递减有序输出 if(T){Traverse(T->rchild);visit(T->data);Traverse(T->lchild);} } int Delete(BiTree &p){BiTree q,s;if(!p->rchild){//只需接左子树q=p; p=p->lchild;free(q); }else if(!p->lchild){//只需接右子树q=p; p=p->rchild;free(q); }else{//左右子树均不空q=p; s=p->lchild;while(s->rchild){q=s; s=s->rchild; //找到右下角 }p->data=s->data; //把右下角s的值赋给pif(q!=p) q->rchild=s->lchild;else q->lchild=s->lchild; free(s);}return 1;}int DeleteBST(BiTree &T,int key){if(!T) return 0;else{if(key==T->data.key){return Delete(T);}else if(key<T->data.key)return DeleteBST(T->lchild,key);elsereturn DeleteBST(T->rchild,key);}}int main(){int n;BiTree T=NULL;printf("输入一组数:");CreateBiTree(T);printf("递减有序输出:");Traverse(T);printf("\n");printf("输入要删除的数:");scanf("%d",&n); DeleteBST(T,n);Traverse(T);return 0;}
阅读全文
0 0
- 二叉排序树,建立,查找,删除等操作
- 二叉排序树的操作(建立、插入、删除和查找)
- 二叉排序树的相关操作(插入,查找,删除,遍历等)
- C++实现二叉排序树BSTree --插入删除摧毁查找等操作
- 二叉排序树的查找、插入、删除、建立
- 二叉排序树的建立、查找和删除
- C++建立查找删除节点二叉排序树
- 二叉排序树的c++实现,查找,删除等
- 二叉排序树的建立和树中节点的查找删除操作
- 二叉排序树的基本操作(建立,中序遍历,查找,删除,插入)
- java实现二叉排序树的建立,查找,插入,删除
- 二叉排序树的建立,删除
- 数据结构实验之查找一:二叉排序树 SDUT 二叉排序树的建立与判断 (与删除)
- 二叉排序树查找、插入、删除
- 二叉排序树的查找删除
- 二叉排序树创建、查找、删除
- 顺序表的各种操作(建立,查找,删除,插入等)
- 单链表的各种操作(建立,查找,删除,插入,归并等)
- STL之容器小结
- spring boot日志打印(六)
- 【基本算法】统计n!尾部零
- Java NIO学习笔记二(Buffer的flip()方法详解)
- 用Gson在Hibernate框架下出现栈溢出
- 二叉排序树,建立,查找,删除等操作
- Android 不能在子线程中更新ui的讨论和分析
- ubuntu 16.04 LTS
- AndroidStudio3.0--api和implementation
- 纯CSS实现垂直居中的几种方法
- 56. Merge Intervals
- HBase client访问表过程分析
- Kafka知识梳理和整合
- Apchece服务