04-树5 Root of AVL Tree
来源:互联网 发布:淘宝返利链接怎么做 编辑:程序博客网 时间:2024/06/06 19:58
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate the rotation rules.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integerNNN (≤20\le 20≤20) which is the total number of keys to be inserted. Then NNN distinct integer keys are given in the next line. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print the root of the resulting AVL tree in one line.
Sample Input 1:
588 70 61 96 120
Sample Output 1:
70
Sample Input 2:
788 70 61 96 120 90 65
Sample Output 2:
88
主要是调整平衡二叉树,LL,RR,LR,RL.....
#include <stdio.h>#include <stdlib.h>#define ElementType int#define Max(a,b) ((a)>(b)?(a):(b))typedef struct AVLTreeNode{ ElementType Data; struct AVLTreeNode *Left; struct AVLTreeNode *Right; int Height;} *AVLTree;int GetHeight(AVLTree T){ if(!T) return 0; else return T->Height;}AVLTreeSingleLeftRotation(AVLTree A){ AVLTree B=A->Left; A->Left=B->Right; B->Right=A; A->Height=Max(GetHeight(A->Left),GetHeight(A->Right))+1; B->Height=Max(GetHeight(B->Left),A->Height)+1; return B;}AVLTreeSingleRightRotation(AVLTree A){ AVLTree B=A->Right; A->Right=B->Left; B->Left=A; A->Height=Max(GetHeight(A->Left),GetHeight(A->Right))+1; B->Height=Max(GetHeight(B->Right),A->Height)+1; return B;}AVLTreeDoubleLeftRightRotation(AVLTree A){ A->Left=SingleRightRotation(A->Left); return SingleLeftRotation(A);}AVLTreeDoubleRightLeftRotation(AVLTree A){ A->Right=SingleLeftRotation(A->Right); return SingleRightRotation(A);}AVLTree AVL_Insertion(ElementType X, AVLTree T){ if(!T){ T=(AVLTree)malloc(sizeof(struct AVLTreeNode)); T->Data=X; T->Height=0; T->Left=T->Right=NULL; }else if(X<T->Data){ T->Left=AVL_Insertion(X,T->Left); if(GetHeight(T->Left)-GetHeight(T->Right)==2)//判断左右两边的树平衡不 if(X<T->Left->Data) T=SingleLeftRotation(T);//LL旋转 else T=DoubleLeftRightRotation(T);//LR旋转 }else if(X>T->Data){ T->Right=AVL_Insertion(X,T->Right); if(GetHeight(T->Left)-GetHeight(T->Right)==-2) if(X>T->Right->Data) T=SingleRightRotation(T);//RR旋转 else T=DoubleRightLeftRotation(T);//RL旋转 } T->Height=Max(GetHeight(T->Left),GetHeight(T->Right))+1;//height为此子树的高度 return T;}int main(){ int i,NodeNum,tmpkey; AVLTree tree=NULL; scanf("%d",&NodeNum); for(i=0;i<NodeNum;i++){ scanf("%d",&tmpkey); tree=AVL_Insertion(tmpkey,tree); } printf("%d",tree->Data); return 0; }
0 0
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树5- Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树4. Root of AVL Tree
- 04-树3. Root of AVL Tree
- 04-树3. Root of AVL Tree
- 04-树5 Root of AVL Tree (25分)
- 04-树5 Root of AVL Tree (25分)
- 04-树5 Root of AVL Tree (25分)
- 04-树5 Root of AVL Tree (25分)
- 04-树5 Root of AVL Tree (25分)
- 04-树5 Root of AVL Tree
- 有道云笔记和有道词典无法联网
- 网络不存在或尚未启动的问题
- hdu4288Coder
- postgresql pgAgent 定时任务
- 兼容性问题
- 04-树5 Root of AVL Tree
- 专题三1006
- uvalive4613
- ubuntu下阅读源码工具
- Auto packing the repository in background for optimum performance
- //设置键盘移动位置 一般用于适配
- PHP上传文件类型
- 支持向量机 - 5 - SMO算法
- RHEL系统部署网络yum源