首页 > 代码库 > 二叉查找树
二叉查找树
1 #ifndef _Tree_H 2 3 struct TreeNode; 4 typedef struct TreeNode *Position; 5 typedef struct TreeNode *SearchTree; 6 7 SearchTree MakeEmpty(SearchTree T); 8 Position Find(ElementType X, SearchTree T); 9 Position FindMin(SearchTree T); 10 Position FindMax(SearchTree T); 11 SearchTree Insert(ElementType X, SearchTree T); 12 SearcgTree Delete(ElementType X, SearchTree T); 13 ElementType Retrieve(Position P); 14 15 #endif 16 17 struct TreeNode 18 { 19 ElementType Element; 20 SearchTree Left; 21 SearchTree Right; 22 } 23 24 25 SearchTree MakeEmpty(SearchTree T) 26 { 27 if (T != NULL) 28 { 29 MakeEmpty(T->Left); 30 MakeEmpty(T->Right); 31 free(T); 32 } 33 return NULL; 34 } 35 36 37 Position Find(ElementType X, SearchTree T) 38 { 39 if (T == NULL) 40 return NULL; 41 if (X < T->Element) 42 return Find(X, T->Left); 43 else if (X > T->Element) 44 return Find(X, T->Right); 45 else 46 return T; 47 } 48 49 50 Position FindMin(SearchTree T) 51 { 52 if (T == NULL) 53 return NULL; 54 else if (T->Left == NULL) 55 return T; 56 else 57 return FindMin(T->Left); 58 } 59 60 Position FindMax(SearchTree T) 61 { 62 if (T != NULL) 63 while (T->Right != NULL) 64 T = T->Right; 65 return T; 66 } 67 68 69 SearchTree Insert(ElementType X, SearchTree T) 70 { 71 if (T == NULL) 72 { 73 T = malloc(sizeof(struct TreeNode)); 74 if (T = NULL) 75 perror("Out of Space!"); 76 else 77 { 78 T->Element = X; 79 T->Left = T->Right = NULL; 80 } 81 } 82 else if (X < T->Element) 83 T->Left = Insert(X, T->Left); 84 else 85 T->Right = Insert(X, T->Right); 86 87 return T; 88 } 89 90 91 SearchTree Delete(ElementType X, SearchTree T) 92 { 93 Position TmpCell; 94 95 if (T == NULL) 96 perror("Element not found!"); 97 else if (X < T->Left) 98 T->Left = Delete(X, T->Left); 99 else if(X > T-Right)100 T->Right = Delete(X, T->Right);101 102 else if (T->Left && T->Right)103 {104 TmpCell = FindMin(T->Right);105 T->Element = TmpCell->Element;106 T->Right = Delete(T->Element, T->Right);107 }108 else109 {110 TmpCell = T;111 if (T->Left == NULL)112 T = T->Right;113 else if (T->Right == NULL)114 T = T->Left;115 free(TmpCell);116 }117 118 return T;119 }
二叉查找树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。