04-树4. Root of AVL Tree
2015-03-29 00:18
429 查看
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.
Now given a sequence of insertions, you are supposed to tell the root of the resulting AVL tree.
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 ythe root of the resulting AVL tree in one line.
Sample Input 1:
Sample Output 1:
Sample Input 2:
Sample Output 2:
88
这题主要考查了平衡二叉树的插入操作:
1. RR旋转、LL旋转比较好理解;
2. RL旋转、LR旋转则可以利用RR旋转和LL旋转操作得到:
若是需要LR旋转,则对T->left进行一次RR旋转,然后T就变成需要LL旋转,于是再进行一次LL旋转即可。(表达得是不是很清楚)
rotation rules.
Now given a sequence of insertions, you are supposed to tell the root of the resulting AVL tree.
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 ythe root of the resulting AVL tree in one line.
Sample Input 1:
5 88 70 61 96 120
Sample Output 1:
70
Sample Input 2:
7 88 70 61 96 120 90 65
Sample Output 2:
88
这题主要考查了平衡二叉树的插入操作:
1. RR旋转、LL旋转比较好理解;
2. RL旋转、LR旋转则可以利用RR旋转和LL旋转操作得到:
若是需要LR旋转,则对T->left进行一次RR旋转,然后T就变成需要LL旋转,于是再进行一次LL旋转即可。(表达得是不是很清楚)
#include <iostream> using namespace std; typedef struct Node { int data; Node* left; Node* right; int height; Node(int d):data(d),left(NULL),right(NULL),height(0){}; }Node,*TreeRoot; int Get_max(int a, int b) { return (a > b ? a : b); } //get the height of the tree or subtree int Get_Height(TreeRoot T) { if(!T) return -1; return T->height; } TreeRoot RR_Rotation(TreeRoot A) { Node* B = A->right; A->right = B->left; B->left = A; A->height = Get_max(Get_Height(A->left), Get_Height(A->right)) + 1; B->height = Get_max(Get_Height(B->left), Get_Height(B->right)) + 1; return B; } TreeRoot LL_Rotation(TreeRoot A) { Node* B = A->left; A->left = B->right; B->right = A; A->height = Get_max(Get_Height(A->left), Get_Height(A->right)) + 1; B->height = Get_max(Get_Height(B->left), Get_Height(B->right)) + 1; return B; } TreeRoot RL_Rotation(TreeRoot A) { A->right = LL_Rotation(A->right); return RR_Rotation(A); } TreeRoot LR_Rotation(TreeRoot A) { A->left = RR_Rotation(A->left); return LL_Rotation(A); } TreeRoot AVLTree_Insert(int x, TreeRoot T) { if(!T) //If the thee is empty. { T = new Node(x); } //If th 4000 e element>T->data, insert it at the right of the root else if(x > T->data) { T->right = AVLTree_Insert(x, T->right); if(Get_Height(T->right) - Get_Height(T->left) == 2) { if(x > T->right->data) T = RR_Rotation(T); else T = RL_Rotation(T); } } //If the element<T->data, insert it at the left of the root else if(x < T->data) { T->left = AVLTree_Insert(x, T->left); if(Get_Height(T->left) - Get_Height(T->right) == 2) { if(x < T->left->data) T = LL_Rotation(T); else T = LR_Rotation(T); } } else return T; T->height = Get_max(Get_Height(T->left), Get_Height(T->right)) + 1; return T; } int main() { int n; int input; TreeRoot T = NULL; cin>> n; for(int i=0; i< n; i++) { cin>> input; T = AVLTree_Insert(input, T); } cout<< T->data <<endl; system("pause"); return 0; }
相关文章推荐
- 04-树5 Root of AVL Tree (25分)
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 数据结构之AVLTree(04-1:Root of AVL Tree)
- 04-树5 Root of AVL Tree(25 分)
- 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
- 04-树5 Root of AVL Tree
- 04-1. Root of AVL Tree (25)
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree (25分)
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree
- 04-树5 Root of AVL Tree(25 point(s))
- 04-树5 Root of AVL Tree(25 分)
- 04-树5- Root of AVL Tree
- 04-树5 Root of AVL Tree
- 中国大学MOOC-数据结构基础习题集、04-1、Root of AVL Tree