//AVTree.h

 #ifndef MY_AVLTREE_H
#define MY_AVLTREE_H
typedef int ElementType;
struct TreeNode
{
ElementType data;
struct TreeNode *left;
struct TreeNode *right;
int height;
};
typedef struct TreeNode TreeNode;
typedef TreeNode *Tree; Tree Find(ElementType e,Tree t);
Tree Insert(ElementType e,Tree t);
Tree Create();
//int Destroy();//这个没写。。。自己写下吧
Tree LeftRotate(Tree t);
Tree RightRotate(Tree t);
int Height(Tree t);
void Show(Tree t);
#endif

//AVLTree.cpp

 #include <stdlib.h>
#include <stdio.h>
#include "AVLTree.h"
#define MAX(a,b) ((a)>(b)?(a):(b))
Tree Create()
{
Tree t=(Tree)malloc(sizeof(TreeNode));
if(NULL==t)
{
printf("内存分配错误\n");
return NULL;
}
t->data=;
t->left=NULL;
t->right=NULL;
t->height=;
return t;
}
Tree Find(ElementType e,Tree t)
{
if(NULL==t)
return NULL;
if(e==t->data)
return t;
else if(e>t->data)
return Find(e,t->right);
else
return Find(e,t->left);
}
int Height(Tree t)
{
if(NULL==t)
return -;
else
return t->height;
}
Tree LeftRotate(Tree t)
{ if(NULL==t)
return NULL;
Tree newtree=t->right;
t->right=newtree->left;
newtree->left=t;
t->height=MAX(Height(t->left),Height(t->right))+;
newtree->height=MAX(Height(newtree->left),Height(newtree->right))+;
return newtree;
} Tree RightRotate(Tree t)
{
if(NULL==t)
return NULL;
Tree newtree=t->left;
t->left=newtree->right;
newtree->right=t;
t->height=MAX(Height(t->left),Height(t->right))+;
newtree->height=MAX(Height(newtree->left),Height(newtree->right))+;
return newtree;
} Tree Insert(ElementType e,Tree t)
{
if(NULL==t)
{
Tree first=(Tree)malloc(sizeof(TreeNode));
if(NULL==first)
{
printf("内存分配错误\n");
return NULL;
}
first->left=NULL;
first->right=NULL;
first->height=;
first->data=e;
return first;
}
if(e==t->data)
{
printf("元素已存在\n");
return t;
}
if(e>t->data)
{
t->right=Insert(e,t->right);
int left=Height(t->left);
int right=Height(t->right);
if(right-left==)
if (e<t->right->data)
{
t->right=RightRotate(t->right);
t=LeftRotate(t);
}
else
t=LeftRotate(t);
}
else
{
t->left=Insert(e,t->left);
int left=Height(t->left);
int right=Height(t->right);
if(left-right==)
if (e>t->left->data)
{
t->left=LeftRotate(t->left);
t=RightRotate(t);
}
else
t=RightRotate(t);
}
t->height=MAX(Height(t->left),Height(t->right))+;
return t;
}
void Show(Tree t)
{
if(t==NULL)
return;
Show(t->left);
printf("%d ",t->data);
Show(t->right); return;
}

最新文章

  1. Android之使用Bundle进行IPC
  2. Akka.NET v1.0 已发布,支持Mono
  3. Linux内核目录结构
  4. android权限大全
  5. 编写中断例程7ch:计算word型数据的平方
  6. cakephp 打印出SQL语句
  7. Jetty与tomcat的比较
  8. Task Scheduler Error and Success Constants (Windows)
  9. 执​行​o​r​a​c​l​e​函​数​的​四​种​方​法
  10. tomcat 显示目录文件列表
  11. Python新手学习基础之循环语句——While循环
  12. 图片和提交servlet的相对和绝对路径
  13. 【从零开始】用node搭建一个jsonp&amp;json服务
  14. [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I
  15. 【Linux基础】Linux更改系统IP
  16. TreeSet的两种排序方式,含Comparable、Comparator
  17. Angular $scope和$rootScope
  18. PHP &quot;松散比较&quot;
  19. jquery zTree异步搜索的例子--搜全部节点
  20. javascript 重构alert()

热门文章

  1. excel-填充
  2. C#LeetCode刷题之#125-验证回文串(Valid Palindrome)
  3. C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
  4. C#LeetCode刷题之#594-最长和谐子序列​​​​​​​​​​​​​​(Longest Harmonious Subsequence)
  5. JavaScript package.json里添加git-cz
  6. 靶机练习 - ATT&amp;CK红队实战靶场 - 1. 环境搭建和漏洞利用
  7. LeetCode 90 | 经典递归问题,求出所有不重复的子集II
  8. 攻防世界-web(进阶)-Training-WWW-Robots
  9. 《Java从入门到失业》第二章:Java环境(三):Java命令行工具
  10. 用心整理的 献丑啦 一些关于http url qs fs ...模块的方法