二叉查找树
2012-09-13 22:39
239 查看
#include <stdio.h> #include <stdlib.h> typedef int ElementType; struct TreeNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree; 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 RETRIVE( Position P); void PrintElement (SearchTree T); void PreOrder(SearchTree T); void InOrder(SearchTree T); void PostOrder(SearchTree t); struct TreeNode { ElementType Element; SearchTree Left; SearchTree Right; }; 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); } Position FindMax(SearchTree T) { if( T == NULL) return NULL; else if( T->Right == NULL) return T; else return FindMax(T->Right); } SearchTree Insert(ElementType X, SearchTree T) { if(T == NULL) { T = malloc(sizeof(struct TreeNode)); if( T == NULL) printf("内存分配失败"); 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("ERROR "); 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; } ElementType RETRIVE(Position P) { return P->Element; } oid PrintElement (SearchTree T) { printf("%3d ",RETRIVE(T)); } void PreOrder(SearchTree T) { if( T != NULL) { PrintElement(T); PreOrder(T->Left); PreOrder(T->Right); } } void InOrder(SearchTree T) { if( T != NULL) { InOrder( T->Left); PrintElement(T); InOrder(T->Right); } } oid PostOrder(SearchTree T) { if(T != NULL) { PostOrder(T->Left); PostOrder(T->Right); PrintElement(T); } } int main() { SearchTree T = NULL; int i, j, m, n; ElementType tmp; printf( "Number of Elements:" ); scanf( "%d", &n ); for ( i = 0; i < n; i++) { scanf( "%d", &tmp ); T = Insert( tmp, T ); } printf( "\nPreOrder :" ); PreOrder( T ); printf( "\nInOrder :" ); InOrder( T ); printf( "\nPostOrder:" ); PostOrder( T ); printf( "\n" ); return 0; }
相关文章推荐
- 二叉查找树
- 二叉查找树
- 查找、检索 算法-总结2 二叉查找树 [BST]
- 二叉查找树的删除操作
- 二叉查找树(一)
- 二叉搜索树;二叉查找树;二叉排序树;binary search tree
- 程序员面试100题之十三:求二叉查找树的镜像
- 二叉查找树及平衡二叉查找树
- 最优二叉查找树(optimal BST)
- 二叉查找树(自己写的版本)
- 第19题 在二叉查找树中找到两个结点的最低公共祖先 Lowest Common Ancestor
- 二叉查找树--插入、删除、查找
- 基于数组的二叉查找树 Binary Search Tree (Java实现)
- 二叉查找树(三)
- 二叉查找树转为双向链表
- 【算法导论】第12章二叉查找树
- 二叉查找树的操作(插入、删除、查找)
- 一步一步写二叉查找树
- 寻找满足二叉查找树性质的最大子树
- 二叉查找树与中间值查找