<<c>>二叉查找树
来源:互联网 发布:arr数组怎么转化成json 编辑:程序博客网 时间:2024/06/07 21:54
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>typedef struct TreeNode *PtrToNode;typedef struct TreeNode * Position;typedef struct TreeNode * SearchTree;typedef int ElemType;struct TreeNode { ElemType Element; PtrToNode Left; PtrToNode Right;};SearchTree MakeEmpty(SearchTree T) { if (T != NULL) { MakeEmpty(T->Left); MakeEmpty(T->Right); free(T); } return NULL;}Position Find(ElemType 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(ElemType x, SearchTree T) { if (T == NULL) { T = (SearchTree)malloc(sizeof(struct TreeNode)); if (T != NULL) { 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(ElemType 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;}void Visit(SearchTree T) { if (T != NULL) { Visit(T->Left); Visit(T->Right); printf("%d\t", T->Element); } else return; }int main(){ SearchTree T; Position P; T=(SearchTree)malloc(sizeof(struct TreeNode)); T->Element = 5; T->Left = T->Right = NULL; P = T; for (int i = 1; i < 10; i++) { P=Insert(i, T); } printf("insert success"); printf("input what you want to find"); int i; scanf("%d", &i); Position K = Find(i, T); printf("find success is:%d\n",K->Element); for(int t=1;t<4&&(T->Right != NULL||T->Left != NULL);t++){ printf("\ninput what you want to delete"); int d; scanf("%d", &d); T = Delete(d, T); printf("delete success"); Visit(T); } T = MakeEmpty(T); if (T == NULL) { printf("\ndelete all the tree"); } printf("\nthe list is empty"); getchar(); return 0;}
0 0
- 二叉查找树(C#)
- <<c>>二叉查找树
- 【二叉查找树】c实现
- 二叉查找树(c语言实现)
- 二叉查找树C语言实现
- 二叉查找树定义与C源码
- 二叉查找树c语言实现
- 二叉查找树的实现(using C)
- 二叉查找树C实现代码
- C 实现数据结构二叉查找树
- 二叉查找树C语言实现
- C语言实现二叉查找树
- 二叉查找树(简单C实现)
- 二叉查找树(C语言实现 )
- C语言 二叉查找树相关算法
- 二叉查找树的C语言实现
- 实现二叉查找树 -- C语言
- C语言实现二叉查找树
- API调用次数限制实现
- 20160521模拟赛总结
- 【初中部 NOIP提高组 】模拟赛A
- ROLL A BALL (Unity 3D 入门) 游戏制作指导 - 滚珠游戏介绍
- Spring_Spring常见错误_error at ::0 can't find referenced pointcut解决办法
- <<c>>二叉查找树
- CSS的分类、选择器、文档结构
- TreeSet的排序两种实现方式Comparator和Comparable
- hdu_5690_All X(找循环节)
- Eclipse+NDK 环境配置
- django框架从零开始_011_测试view
- iOS学习笔记之七--图片的移动
- 精度问题
- (创建型模式)FACTORY——简单工厂模式