二叉查找树的简单实现(C语言版)
来源:互联网 发布:惊讶猫走红网络 编辑:程序博客网 时间:2024/05/21 03:27
老司机不多说,直接上代码
头文件:
#ifndef BINARYTREE_FIND_H_INCLUDED#define BINARYTREE_FIND_H_INCLUDEDstruct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;typedef int ElementType;SearchTree MakeEmpty(SearchTree T);Position Find(ElementType X,SearchTree T);Position FindMin(SearchTree T);Position FindMax(SearchTree T);SearchTree Insert(ElementType X,SearchTree T);SearchTree Delete(ElementType X,SearchTree T);ElementType Retrieve(Position P);#endif // BINARYTREE_FIND_H_INCLUDED
实现:
#include "BinaryTree_Find.h"#include <stdio.h>#include <stdlib.h>struct TreeNode{ ElementType Element; SearchTree Left; SearchTree Right;};void FatalError(char * s){ printf("%s\n",s);}void Error(char * s){ printf("%s\n",s);}SearchTree MakeEmpty(SearchTree T){ if(T != NULL) { MakeEmpty(T->Left); MakeEmpty(T->Right); free(T); } return NULL;}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; else 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;}SearchTree Insert(ElementType X,SearchTree T){ if(T == NULL) { T = malloc(sizeof (struct TreeNode)); if(T == NULL) FatalError("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) Error("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;}int main(){ SearchTree T = malloc(sizeof(struct TreeNode)); T->Element = 100; T->Left = NULL; T->Right = NULL; int i; for(i = 0; i < 50; i++) Insert(i,T); //Delete(0,T); Position MIN = FindMin(T); Position MAX = FindMax(T); printf("%d\n",MIN->Element); printf("%d\n",MAX->Element); free(T); return 0;}
代码改编自:《数据结构与算法分析》第二版
0 0
- 二叉查找树的简单实现(C语言版)
- 数据结构 二叉树的实现 c语言版
- 数据结构与算法(C语言版)__二叉查找树
- sms4的简单实现(C语言版)
- skiplist的简单实现(c语言版)
- 二叉树(C语言版)
- 二叉查找树的实现(c++)
- 二叉查找树(简单C实现)
- C语言版--二叉树
- C语言版--二叉树
- 链表的简单实现(C语言版)
- 二叉树的遍历(递归法)C语言版
- 二叉树的基本操作(C语言版)
- 求二叉树的宽度C语言版
- 链式二叉树的遍历C语言版
- 二叉查找树的简单模板实现
- 二叉查找树的简单实现
- 二叉查找树的简单C++实现
- 论文阅读:SSD: Single Shot MultiBox Detector
- checkbox属性
- 最优化算法实践
- 语音信号处理之(四)梅尔频率倒谱系数(MFCC)
- 运行MyBatis Generator
- 二叉查找树的简单实现(C语言版)
- callback&&callback()
- arm汇编伪指令
- SSD:Single Shot MultiBox Detector的安装配置和运行
- android源码学习-目录
- 常见对象_模拟用户登录案例增强版加入猜数字游戏
- Is Subsequence
- 关于封装的一种解释
- 函数的入栈和出栈,自定义函数