04-树5 Root of AVL Tree
来源:互联网 发布:直播笑声软件叫什么 编辑:程序博客网 时间:2024/06/05 05:10
04-树5 Root of AVL Tree (25分) Now given a sequence of insertions, you are supposed to tell the root of the resulting AVL tree.
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 integer N (≤20) which is the total number of keys to be inserted. Then N 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
思路:
基础题,建一个AVL树
#include <iostream>using namespace std;typedef struct TNode* AVLTree;struct TNode{ int height; AVLTree left; AVLTree right; int data;};int Max(int x,int y){ int q; x>y?q=x:q=y; return q;}int Height(AVLTree t){ if(t == NULL) return -1; else return t->height;}AVLTree SingleRotateWithLeft(AVLTree T) //LL{ AVLTree k; k = T->left; T->left = k->right; k->right = T; k->height = Max(Height(k->left), Height(k->right)) + 1; T->height = Max(Height(T->left), Height(T->right)) + 1; return k;}AVLTree SingleRotateWithRight(AVLTree T) //RR{ AVLTree k; k = T->right; T->right = k->left; k->left = T; k->height = Max(Height(k->left), Height(k->right)) + 1; T->height = Max(Height(T->left), Height(T->right)) + 1; return k;}AVLTree DoubleRotateWithLeft(AVLTree T) //LR{ T->left = SingleRotateWithRight(T->left); T = SingleRotateWithLeft(T); return T;}AVLTree DoubleRotateWithRight(AVLTree T) //RL{ T->right = SingleRotateWithLeft(T->right); T = SingleRotateWithRight(T); return T;}AVLTree Insert(AVLTree T, int x){ if(T == NULL) { T = new TNode; T->left = T->right = NULL; T->data = x; } else if(x < T->data) //left child { T->left = Insert(T->left, x); if(Height(T->left) - Height(T->right) == 2) { if(x < T->left->data) T = SingleRotateWithLeft(T);//LL else if(x > T->left->data) T = DoubleRotateWithLeft(T);//LR } } else if(x > T->data) //right child { T->right = Insert(T->right, x); if(Height(T->right) - Height(T->left) == 2) { if(x > T->right->data) T = SingleRotateWithRight(T);//RR else if(x < T->right->data) T = DoubleRotateWithRight(T);//RL } } //update T's height T->height = Max(Height(T->left), Height(T->right)) + 1; return T;}int main(){ int n,x; AVLTree T = NULL; cin>>n; for(int i=0; i<n; i++) { cin>>x; T = Insert(T,x); } cout << T->data << endl; 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
- JSP的基本概念及语法
- Metal Shader Compiler Options
- Lua 单例
- .NET, ASP.NET, CLR版本问题总结
- Mac--键盘输入的技巧
- 04-树5 Root of AVL Tree
- 1011. World Cup Betting (20)
- nginx篇四
- nDPI - Quick Start Guide
- Spring整合JMS
- WEB前端学习 Day4(定位)
- [LeetCode]Longest Increasing Subsequence
- 1012. The Best Rank (25)
- HTML5中改良的input元素的种类