【数据结构基础】二叉搜索(排序)树的基本操作
2017-05-30 15:20
549 查看
#include<stdio.h> #include<stdlib.h> typedef struct TreeNode{ int data; struct TreeNode *lchild,*rchild; }Tree,*BTree; void Build_Tree(FILE *pfin,BTree *T){ int num; fscanf(pfin,"%d",&num); if(num==-1){ *T=NULL; } else{ *T=(BTree)malloc(sizeof(Tree)); (*T)->data=num; Build_Tree(pfin,&(*T)->lchild); Build_Tree(pfin,&(*T)->rchild); } } void Pre_Traversal(FILE *pfout,BTree T){ if(T!=NULL){ fprintf(pfout,"%d ",T->data); Pre_Traversal(pfout,T->lchild); Pre_Traversal(pfout,T->rchild); } } /**------------递归实现 查找 插入 删除------------- **/ BTree Search(BTree T,int x){ if(!T){ return NULL; }else{ if(x<T->data){ T=Search(T->lchild,x); }else{ if(x>T->data){ T=Search(T->rchild,x); }else{ return T; } } } } void Insert(BTree *T,int in){ if(!(*T)){ *T=(BTree)malloc(sizeof(Tree)); (*T)->data=in; (*T)->lchild=(*T)->rchild=NULL; return; } if(in<(*T)->data){ Insert(&(*T)->lchild,in); }else{ Insert(&(*T)->rchild,in); } } //找二叉搜索树中的最大值 BTree FindMax(BTree T,BTree *M){ if(!T){ return *M; }else{ *M=T; T=FindMax(T->rchild,M); } } int Delete(BTree *T,int out){ BTree f,p,q,s; p=*T; f=NULL; while(p && p->data!=out){ f=p; if(p->data>out){ p=p->lchild; }else{ p=p->rchild; } } if(p==NULL){ return (0); } if(p->lchild==NULL){ if(f==NULL){ *T=p->rchild; }else{ if(f->lchild==p){ f->lchild=p->rchild; }else{ f->rchild=p->rchild; } } free(p); } else{ q=p; s=p->lchild; while(s->rchild){ q=s; s=s->rchild; } if(q==p){ q->lchild=s->lchild; }else{ q->rchild=s->lchild; } p->data=s->data; free(s); return (1); } } int main(void){ BTree T,s; BTree M=NULL; int x,in,out;//查找,插入,删除的数 FILE *pfin,*pfout; pfin=fopen("datain.txt","r"); pfout=fopen("dataout.txt","w"); Build_Tree(pfin,&T); // M=FindMax(T,&M); // printf("%d",M->data); // Pre_Traversal(pfout,T); // scanf("%d",&x); // s=Search(T,x); // scanf("%d",&in); // Insert(&T,in); // Pre_Traversal(pfout,T); scanf("%d",&out); Delete(&T,out); Pre_Traversal(pfout,T); return 0; }
相关文章推荐
- 【数据结构基础】最大堆的基本操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
- 数据结构——排序/搜索二叉树(非递归)的基本操作实现
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础5.4:堆(HEAP)的基本操作(插入与删除)
- 【数据结构】顺序栈的基本操作
- 数据结构之——队列的基本操作
- 数据结构基础 之 双链表 与 循环链表 各类操作、思想与实现
- 数据结构——几种链表基本操作
- 队列的基本操作 数据结构
- 数据结构基础算法整理归纳:选择排序(四)
- 数据结构——c语言描述 第六章(1)二叉树树的基本操作和二叉树的线索化
- Core Data 基本数据操作 增删改查 排序
- 数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
- 数据结构——队列的基本操作