二叉查找树的基本实现-c语言
来源:互联网 发布:stm32 3轴控制算法 编辑:程序博客网 时间:2024/05/21 04:42
#include<stdio.h>#include<stdlib.h>struct BinaryTree;typedef BinaryTree *position;typedef position SearchTree;struct BinaryTree{ int Element; position Left; position right;};SearchTree creat(SearchTree t);//构造二叉树SearchTree MakeEmpty(SearchTree t);//这个函数把二叉树销毁了,空树。position Find(int x, SearchTree t);//寻找x的节点position FindMin(SearchTree t);//二叉树的最小节点position FindMax(SearchTree t);//二叉树的最大节点SearchTree Insert(int x, SearchTree t);//插入元素,返回树根SearchTree Delete(int x,SearchTree t);//int Retrieve(position p);//返回节点元素void PreOrderTraverse(SearchTree t);//先序遍历void midprint(SearchTree t);//中序遍历void traversingprint(SearchTree t);//后序遍历SearchTree creat(SearchTree t){ int num; scanf("%d", &num); t = (SearchTree)malloc(sizeof(struct BinaryTree)); if (t == NULL) { printf("No space!\n"); return NULL; } t->Element = num; t->Left = NULL; t->right = NULL; return t;}SearchTree MakeEmpty(SearchTree t){ if (t != NULL) { MakeEmpty(t->Left); MakeEmpty(t->right); free(t); } return NULL;}position Find(int x, SearchTree t){ if (t == NULL) return NULL; if (t->Element == x) return t; else if (x < t->Element) return Find(x, t->Left); else return Find(x, t->right);}position FindMin(SearchTree t){ if (t == NULL) return t; else if (t->Left == NULL) return t; else return FindMin(t->Left);}position FindMax(SearchTree t){ if (t == NULL) return NULL; else if (t->right == NULL) return t; else return FindMax(t->right);}SearchTree Insert(int x, SearchTree t){ if (t == NULL) { t = (SearchTree)malloc(sizeof(struct BinaryTree)); if (t == NULL) { printf("No space\n"); return 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(int x,SearchTree t){ if (t == NULL) return NULL; else if (x < t->Element) //小于t,递归查找 t->Left = Delete(x, t->Left); else if (x > t->Element) t->right = Delete(x, t->right); else if (t->Left&&t->right) //等于t,左右儿子齐全 { position p; p = FindMin(t->right); //找到右子树的最小值,赋给t,然后再删除被复制的节点,确保只有一个。 t->Element = p->Element; t->right = Delete(t->Element, t->right); } else //等于t,只有一个儿子或者没有儿子 { position p; p = t; if (t->Left == NULL) //找个儿子接班,没有就置空。 t = t->right; else if (t->right == NULL) t = t->Left; free(p); } return t;}int Retrieve(position p){ return p->Element;}void PreOrderTraverse(SearchTree t){ if (t) { printf("%d\n", t->Element); PreOrderTraverse(t->Left); PreOrderTraverse(t->right); }}void midprint(SearchTree t){ if (t) { midprint(t->Left); printf("%d\n", t->Element); midprint(t->right); }}void traversingprint(SearchTree t){ if (t) { traversingprint(t->Left); traversingprint(t->right); printf("%d\n", t->Element); }}
测试一下
#include<stdio.h>#include"BinaryTree.h"int main(){ SearchTree t=NULL; t = creat(t); int n,num; scanf("%d", &n); while (n--) { scanf("%d", &num); Insert(num, t); } position p; p = FindMin(t); printf("最小值是%d\n", p->Element); p = FindMax(t); printf("最大的值是%d\n", p->Element); printf("先序遍历:\n"); PreOrderTraverse(t); printf("中序遍历:\n"); midprint(t); return 0;}
0 0
- 二叉查找树的基本实现-c语言
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- 二叉查找树的C语言实现
- 二叉查找树的C语言实现
- C语言实现二叉查找树(BST)的基本操作
- 基于c语言实现的二叉查找树
- 二叉查找树的C语言实现(一)
- 二叉查找树的C语言实现(二)
- 二叉查找树(一)之 C语言的实现
- 详解二叉查找树算法的实现(c语言)
- C语言实现二叉查找树的输出
- 二叉查找树(c语言实现)
- 二叉查找树C语言实现
- 二叉查找树c语言实现
- 二叉查找树C语言实现
- C语言实现二叉查找树
- 二叉查找树(C语言实现 )
- 实现二叉查找树 -- C语言
- Lua 实验(3) 注册c#方法到lua
- EditText部分属性使用
- Android系统信息获取 之六:网络连接状态信息获取
- yield语句
- 数据库知识整理Oracle
- 二叉查找树的基本实现-c语言
- php中soap使用,SoapServer服务端编写,SoapClient客户端编写
- iOS 唯一标识符获取
- SQL 函数如何设置参数默认值
- UINavigationController常用属性设置
- 用邻接链表实现图时,二级指针的误用
- Android系统信息获取 之七:获取IP地址和MAC地址
- erlang list
- openCV—基本绘图