二叉查找树的简单实现(C语言版)
2016-11-06 16:49
337 查看
老司机不多说,直接上代码
头文件:
实现:
代码改编自:《数据结构与算法分析》第二版
头文件:
#ifndef BINARYTREE_FIND_H_INCLUDED #define BINARYTREE_FIND_H_INCLUDED struct 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++) Inser 4000 t(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; }
代码改编自:《数据结构与算法分析》第二版
相关文章推荐
- 二叉查找树简单实现
- 二叉查找树的插入和删除简单实现
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- 二叉查找树的简单实现
- 51系列小型操作系统精髓 简单实现6 C语言版待改进
- 二叉查找树的简单模板实现
- [数据结构]二叉查找树 简单实现
- 51系列小型操作系统精髓 简单实现12 C语言版未加保护参数
- 51系列小型操作系统精髓 简单实现12 C语言版加保护参数
- 二叉查找树(简单C实现)
- 二叉查找树的简单实现
- 51系列小型操作系统精髓 简单实现6 C语言版待改进
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 二叉查找树的简单C++实现
- 51系列小型操作系统精髓 简单实现10 C语言版优化后发布(有图)
- 简单数据结构实现——二叉查找树
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- 51系列小型操作系统精髓 简单实现8 C语言版待改进
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- 一个简单的二叉查找树实现