#include "avlTree.h"
int Max(int a,int b)
{
return a>b?a:b;
}
avlTree SingleRotateWithLeft(avlTree k2)
{
avlTree k1;
k1 = k2->lchild;
k2->lchild = k1->rchild;
k1->rchild = k2;
return k1;
}
avlTree SingleRotateWithRight(avlTree k2)
{
avlTree k1;
k1 = k2->rchild;
k2->rchild = k1->lchild;
k1->lchild = k2;
return k1;
}
avlTree DoubleRotateWithLeft(avlTree k1)
{
k1->lchild = SingleRotateWithRight(k1->lchild);
return SingleRotateWithLeft(k1);
}
avlTree DoubleRotateWithRight(avlTree k1)
{
k1->rchild = SingleRotateWithLeft(k1->rchild);
return SingleRotateWithRight(k1);
}
avlTree Insert(avlTree T,ElemType e)
{
if (T == NULL)
{
T = (avlTree)malloc(sizeof(avlNode));
if(!T)
{
printf("Insert: T malloc error!\n");
system("pause");
exit(-1);
}
T->data = e;
T->lchild = NULL;
T->rchild = NULL;
}
else if(e < T->data)
{
T->lchild = Insert(T->lchild,e);
if (Depth(T->lchild) - Depth(T->rchild) == 2)
{
if(e<T->lchild->data)
{
T = SingleRotateWithLeft(T);
}
else
{
T = DoubleRotateWithLeft(T);
}
}
}
else if(e > T->data)
{
T->rchild = Insert(T->rchild,e);
if (Depth(T->rchild) - Depth(T->lchild) == 2)
{
if(e>T->rchild->data)
{
T = SingleRotateWithRight(T);
}
else
{
T = DoubleRotateWithRight(T);
}
}
}
return T;
}
avlTree MakeEmpty(avlTree T)
{
if(T != NULL)
{
T->lchild = MakeEmpty(T->lchild);
T->rchild = MakeEmpty(T->rchild);
free(T);
}
return NULL;
}
avlTree Find(avlTree T,ElemType e)
{
if(T == NULL)
{
return NULL;
}
else if(e<T->data)
{
T->lchild = Find(T->lchild,e);
}
else if(e>T->data)
{
T->rchild = Find(T->rchild,e);
}
return T;
}
avlTree FindMin(avlTree T)
{
if(T == NULL)
{
return NULL;
}
while(T->lchild != NULL)
{
T = T->lchild;
}
return T;
}
avlTree FindMax(avlTree T)
{
if(T == NULL)
{
return NULL;
}
while(T->rchild != NULL)
{
T = T->rchild;
}
return T;
}
int Depth(avlTree T)
{
int rDepth,lDepth;
if(T == NULL)
{
return 0;
}
lDepth = Depth(T->lchild) + 1;
rDepth = Depth(T->rchild) + 1;
return lDepth>rDepth ? lDepth : rDepth;
}
avlTree Delete(avlTree T,ElemType e)
{
if(T == NULL)
{
return NULL;
}
else if(e < T->data)
{
T->lchild = Delete(T->lchild,e);
if(Depth(T->rchild) - Depth(T->lchild) == 2)
{
if (Depth(T->rchild->rchild) < Depth(T->rchild->lchild))
{
T = DoubleRotateWithRight(T);
}
else
{
T = SingleRotateWithRight(T);
}
}
}
else if(e > T->data)
{
T->rchild = Delete(T->rchild,e);
if(Depth(T->lchild) - Depth(T->rchild) == 2)
{
if(Depth(T->lchild->lchild) < Depth(T->lchild->rchild))
{
T = DoubleRotateWithLeft(T);
}
else
{
T = SingleRotateWithLeft(T);
}
}
}
else if(T->lchild == NULL && T->rchild == NULL)
{
free(T);
return NULL;
}
else
{
avlTree tmp = FindMin(T->rchild);
T->data = tmp->data;
T->rchild = Delete(T->rchild,tmp->data);
}
return T;
}
void preOrderTraverse(avlTree T)
{
if(T == NULL)
{
return;
}
printf("%d ",T->data);
preOrderTraverse(T->lchild);
preOrderTraverse(T->rchild);
}
void inOrderTraverse(avlTree T)
{
if(T == NULL)
{
return;
}
inOrderTraverse(T->lchild);
printf("%d ",T->data);
inOrderTraverse(T->rchild);
}
void postOrderTraverse(avlTree T)
{
if(T == NULL)
{
return;
}
postOrderTraverse(T->lchild);
postOrderTraverse(T->rchild);
printf("%d ",T->data);
}
void levelOrderTraverse(avlTree T)
{
if(T == NULL)
{
return;
}
que_init(&Que,20);
que_push(&Que,T);
while(Que.rear != Que.front)
{
avlTree tmp;
que_pop(&Que,&tmp);
printf("%d ",tmp->data);
if(tmp->lchild)
{
que_push(&Que,tmp->lchild);
}
if(tmp->rchild)
{
que_push(&Que,tmp->rchild);
}
}
printf("\n");
}
王小文Ben
- 粉丝: 8
- 资源: 1
最新资源
- 西电微机原理实验-西安电子科技大学微机原理课程实验概述与指导
- 智慧校园(校园AI 产品) 校园安全 智慧校园 教育数字化 AI校园
- 西电微机原理实验四:8255可编程并行接口的应用
- 基于 Go+Echo 开发的多房间实时通讯系统。详细文档+优秀项目+全部资料.zip
- 基于 Go + Vue 的现代化博客系统详细文档+优秀项目+全部资料.zip
- 基于 go + grpc + consul 的微服务系统详细文档+优秀项目+全部资料.zip
- 基于 golang goframe + vue3 的、前后端分离的后台管理系统快捷使用模板,支持按钮级别的 RBAC。详细文档+优秀项目+全部资料.zip
- 基于 goframe2 和vue3 开发的全栈前后端分离的后台管理系统,详细文档+优秀项目+全部资料.zip
- 基于 Golang 的 容器管理系统 API详细文档+优秀项目+全部资料.zip
- 基于 React 实现的电商后台管理系统的前端项目详细文档+优秀项目+全部资料.zip
- 基于 Golang开发的微服务网关,能够实现高性能 HTTP API 转发、服务编排、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展详细文档+优秀项目+全部资料.zip
- 基于 Vue + Go 实现客户关系管理系统,,主要功能有仪表盘、客户管理、合同管理、产品管理、配置、订阅等功能详细文档+优秀项目+全部资料.zip
- 基于beego v2.0.1框架和AdminLte前端框架,开发的go语言通用后台系统,详细文档+优秀项目+全部资料.zip
- 基于 SpringBoot + Spring + SpringMvc + Mybatis + Shiro+ Redis 开发单点登录管理系统详细文档+优秀项目+全部资料.zip
- 基于beego的简易blog系统详细文档+优秀项目+全部资料.zip
- 基于Beego开发的可切换模板的 BBS 社交博客系统、它安装简单便捷,页面简介优美。前端是HTML+JS+CSS,不需要掌握一些前端技术栈也能轻松自定义页面。详细文档+优秀项目+全部资料.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈