简易二叉排序树
2020-02-02 07:29
281 查看
C语言创建二叉排序树
二叉排序树又称二叉搜索树、二叉查找树
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值;
(2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。
基于二叉排序树的这些特性,即使不参照书本,我们也能构建一个二叉排序树
如果因为scanf报错请加上下面这一行
#define _CRT_SECURE_NO_WARNINGS
头文件及宏定义
#define EMPTY -1 #include<stdio.h> #include<stdlib.h>
结构体定义…我又把两个函数写在结构体里面了
输入和输出时间函数
以12:23这样的格式输入及输出
typedef struct Timetree{ int time; struct Timetree *Left; struct Timetree *Right; struct Timetree() { time=EMPTY; Right=NULL; Left=NULL; } void input_time() { int hour,minute; printf("请输入时间:"); start_0:scanf("%d:%d",&hour,&minute); if((hour<0||hour>60)||(minute<0||minute>60)){ printf("时间格式输入有误,请重新输入:"); goto start_0; } time=60*hour+minute; } void output_time() { int hour,minute; if(time==EMPTY){ printf("此结点没有存入时间\n"); } else{ hour=time/60; minute=time%60; if(minute>=10){ printf("%d:%d\n",hour,minute); } else{ printf("%d:0%d\n",hour,minute); } } } }Time,*Ttree;
创建根节点函数
我这个创建根结点函数和创建整个树的函数是分开的,当然也可以把他们合写成一个函数
void CreateTimeTree(Time *T) { Ttree t; t=T; printf("请输入根结点时间:\n"); t->input_time(); t->Left=NULL; t->Right=NULL; }
判断结点的时间大小并按顺序插入函数
我觉得这个是二叉排序树的核心
之前的那个程序我写的特别复杂,这次我把它精简了一下,简单易懂易记
void Insert(Time *head,Time *t) { if(t->time<head->time){ if(head->Left==NULL){ head->Left=t; } else{ head=head->Left; Insert(head,t); } } else if(t->time>=head->time){ if(head->Right==NULL){ head->Right=t; } else{ head=head->Right; Insert(head,t); } } }
输出输出函数
void TimeInput(Time *T) { int num,i; printf("请输入结点数:"); scanf("%d",&num); for(i=0;i<num;i++){ Ttree head=T; Ttree t; t=(Time*)malloc(sizeof(Time)); t->Left=NULL; t->Right=NULL; t->input_time(); printf("[%d]",t->time); Insert(head,t); } } void InorderTime(Time *T) { if(T==NULL){ return ; } InorderTime(T->Left); T->output_time(); InorderTime(T->Right); }
main函数配套菜单
int main() { int sl; Time *T; T=(Time *)malloc(sizeof(Time)); do{ start_1: printf("\t菜单\n建立根结点...1\n创建树并插入...2\n排序输出...3\n退出...0\n"); scanf("%d",&sl); switch(sl){ case 0:exit(0); case 1:CreateTimeTree(T);system("pause");system("cls");break; case 2:TimeInput(T);system("pause");system("cls");break; case 3:InorderTime(T);system("pause");system("cls");break; default:goto start_1; } }while(1); }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- 一种“邻居环”的简易实现
- 【转】ViewHoder的一种简易写法
- 简易实现Redis监控自动短信告警
- 原生js写简易抽奖系统
- 【数据结构与算法】动态查找--二叉排序树
- 第14周 项目1 - 验证算法 - 二叉排序树相关算法
- Python3 实现简易ping监控并发送报警邮件
- 搭建一个简易的springBoot+SpringDataJpa+Oracle项目
- 服务器文件的简易读写
- .Net 生成二维码【超简易,仅供学习】
- 在Linux下实现简易进度条
- 基于JAVA的简易学生管理系统
- 用php的GD库画一个简易股市走势图(折线图)
- JS模块化工具requirejs简易教程
- vue实现简易留言板(todolist)
- Pycharm简易使用教程
- Android开发之SimpleCalculate简易单行计算器
- 第十三周 项目3 二叉排序树
- 【九度】题目1201:二叉排序树
- C++实现二叉排序树