二叉搜索树
来源:互联网 发布:英文面试常见问题知乎 编辑:程序博客网 时间:2024/05/18 01:48
fatal.h
#include <stdio.h>#include <stdlib.h>#define Error( Str ) FatalError( Str )#define FatalError( Str ) fprintf( stderr, "%s\n", Str ), exit( 1 )
tree.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 Retieve(Position P);void PrintElement( SearchTree T );void PreOrder( SearchTree T );void InOrder( SearchTree T );void PostOrder( SearchTree T );void Print(SearchTree T);struct TreeNode{ ElementType Element; SearchTree Left; SearchTree Right;};
tree.c
#include"tree.h"#include<stdlib.h>#include"fatal.h"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("无X!!!\n"); 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 Retrieve(Position P){ return P->Element;}void PrintElement( SearchTree T ){ printf( "%3d ", Retrieve( 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 ); }}void PostOrder( SearchTree T ){ if ( T != NULL ) { PostOrder( T->Left ); PostOrder( T->Right ); PrintElement( T ); }}void Print(SearchTree T){printf("树的遍历如下:\n");printf("先序遍历\n");PreOrder(T);putchar('\n');printf("中序遍历\n");InOrder(T);putchar('\n');printf("后序遍历\n");PostOrder(T);putchar('\n');putchar('\n');}
main.c
#include<stdio.h>#include"tree.h"int main(void){ SearchTree root = NULL;int num, i, temp;printf("请输入序列L的节点个数:");scanf("%d", &num);for(i=0; i<num; i++){scanf("%d", &temp);root = Insert(temp, root);}Print(root);while(1){printf("请输入要删除的节点:");scanf("%d", &temp);Delete(temp, root);Print(root);} return 0;}
- 【二叉搜索数】HDU3791二叉搜索树
- 二叉树--二叉搜索树
- 【二叉树】二叉搜索树
- 二叉树- 二叉搜索树
- 【搜索树】二叉搜索树
- 二叉搜索树BSTree
- 二叉搜索树
- 二叉搜索树
- 二叉搜索树
- 最优二叉搜索树
- 二叉搜索树
- 二叉搜索树
- HDOJ3791 二叉搜索树
- 二叉查找树搜索
- 二叉搜索树
- 二叉搜索树
- BST 二叉搜索树
- 二叉搜索树
- 入门结构体链表
- 修炼一名程序员的职业水准(林庆忠__署名原创)
- 【Linux基础】网络相关命令
- Java 反射机制
- mac sql developer 解压后不能打开
- 二叉搜索树
- 第一章 Shell编程基础
- 【原创】注册表的读写API(windows)
- Js获取table中当前选择行号
- Android学习网站
- 网络安全 Network password
- Android 实现全屏 无标题栏
- 【Linux基础】Linux下C语言编程环境概述
- 快速幂