二叉查找树的基本操作(建立,插入,删除,遍历)
来源:互联网 发布:手机淘宝怎么切换账号 编辑:程序博客网 时间:2024/05/17 23:32
#include <stdio.h>#include <stdlib.h>struct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;typedef int ElementType;struct TreeNode{ ElementType Element; SearchTree Left; SearchTree Right;};SearchTree MakeEmpty(SearchTree T){ if(T!=NULL) { MakeEmpty(T->Left); MakeEmpty(T->Right); free(T); } return T;}/** if(X<T->Element) return Find(X,T->Left); else if(X>T->Element) return Find(X,T->Right);*递归的每一层都返回值X的指针,最终函数返回的是指向值X的指针*/Position Find(ElementType X,SearchTree T){ if(T==NULL) return NULL; if(X<T->Element) return Find(X,T->Left); else if(X>T->Element) return Find(X,T->Right); else return T;}Position FindMin(SearchTree T){ if(T==NULL) return NULL; if(T->Left==NULL) return T; else return FindMin(T->Left);}Position FindMax(SearchTree T){ if(T!=NULL) { while(T->Right!=NULL) T=T->Right; }/**return T结束本次递归的Insert函数,由于T->Left=Insert(X,T->Left);T->Right=Insert(X,T->Right);*有指针赋值情况,将T层层往上,递归最后一层指向了根节点,所以函数返回根节点的指针。*/ return T;}SearchTree Insert(ElementType X,SearchTree T){ if(T==NULL) { T=(struct TreeNode*)malloc(sizeof(struct TreeNode)); if(T==NULL) printf("Out of space!!!"); else { T->Element=X; T->Left=T->Right=NULL; } } else if(X<T->Element) T->Left=Insert(X,T->Left); else if(X>T->Element) T->Right=Insert(X,T->Right); return T;}SearchTree Delete(ElementType X,SearchTree T){ Position TmpCell; if(T==NULL) printf("Element Not Found"); else if(X<T->Element) T->Left=Delete(X,T->Left); else if(X>T->Element) T->Right=Delete(X,T->Right); else if(T->Left&&T->Right)//有两个孩子 { TmpCell=FindMin(T->Right); T->Element=TmpCell->Element; T->Right=Delete(T->Element,T->Right); } else//有一个或者零个孩子 { TmpCell=T; if(T->Left==NULL) T=T->Right; else if(T->Right==NULL) T=T->Left; free(TmpCell); } return T;}void PrintDLR(SearchTree T)//先序遍历二叉查找树{ if(T!=NULL) { printf("%3d\n",T->Element); } if(T->Left!=NULL) PrintDLR(T->Left); if(T->Right!=NULL) PrintDLR(T->Right);}void PrintLDR(SearchTree T)//中序遍历二叉查找树{ if(T->Left!=NULL) { PrintLDR(T->Left); } printf("%3d\n",T->Element); if(T->Right!=NULL) { PrintLDR(T->Right); }}void PrintLRD(SearchTree T)//后序遍历二叉查找树{ if(T->Left!=NULL) { PrintLRD(T->Left); } if(T->Right!=NULL) { PrintLRD(T->Right); } printf("%3d\n",T->Element);}int main(){ SearchTree T; T=(struct TreeNode*)malloc(sizeof(struct TreeNode)); T->Element=9; T->Left=T->Right=NULL; int arr[8]={6,2,1,8,7,10,3,18}; int i; for(i=0;i<8;++i) { Insert(arr[i],T); }// printf("%3d\n",T->Element); printf("中序遍历:"); PrintLDR(T); printf("先序遍历:"); PrintDLR(T); printf("后序遍历:"); PrintLRD(T); return 0;}
0 0
- 二叉查找树的基本操作(建立,插入,删除,遍历)
- 顺序二叉树的建立、查找、删除、插入、替换、遍历
- 二叉排序树的基本操作(建立,中序遍历,查找,删除,插入)
- 二叉查找树的基本操作之查找插入删除
- 二叉树的查找,插入,删除,遍历,最小值,最大值 操作
- 二叉查找树的各种操作(插入、删除、查找、遍历)
- 算法导论中十二章C++实现二叉查找树建立,插入,删除,遍历操作
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- 二叉树的建立,删除,查找,插入,输出(数据结构)
- 单链表建立,插入,删除,查找,遍历操作
- 单链表建立,插入,删除,查找,遍历操作
- 单链表建立,插入,删除,查找,遍历操作!!!!
- 顺序表的建立、插入、删除、查找、遍历操作
- 二叉树的链式实现(插入,查找,遍历,删除)
- 二叉查找树的操作(插入、删除、查找)
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- 二叉搜索树的基本操作(查找、插入、删除)【数据结构】
- 二叉查找树(插入、查找、遍历、删除.........)
- 12C-OCP升级1z-060-008
- Android ContentProvider使用详解
- 正则验证数字(包含小数点),可行。
- iOS 状态栏隐藏设置
- Android闹钟设置
- 二叉查找树的基本操作(建立,插入,删除,遍历)
- 简单的WebView自适应并嵌套在ScrollView里
- Android 中访问网页 webView
- Android中webView与javascript交互
- FFMPEG深入理解
- 递归法获取目录中的目录
- Android 音乐播放器。
- Android中播放视频
- Android 中歌曲录制。。。