1066. Root of AVL Tree (25)
2016-02-15 19:45
441 查看
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:
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
avl树的基本操作。
#include <iostream> using namespace std; inline int MAX(int x,int y){return x > y ? x : y;} struct avl_node { int key; avl_node * left; avl_node * right; int height; avl_node(int k,avl_node * l=NULL,avl_node * r = NULL,int h = 0):key(k),left(l),right(r),height(h){} //h in single node is defined as 1 and that in NULL node defined as -1 }; inline int height(avl_node * node){return node == NULL?-1:node->height;} void rotate_left_chiled(avl_node * & root) { avl_node * tmp=root->left; root->left=tmp->right; tmp->right=root; tmp->height=MAX(height(tmp->left),height(tmp->right))+1; root->height=MAX(height(root->left),height(root->right))+1; root=tmp; } void rotate_right_chiled(avl_node * & root) { avl_node * tmp=root->right; root->right = tmp->left; tmp->left=root; tmp->height=MAX(height(tmp->left),height(tmp->right))+1; root->height=MAX(height(root->left),height(root->right))+1; root=tmp; } void double_rotate_left(avl_node * & root) { rotate_right_chiled(root->left); rotate_left_chiled(root); } void double_rotate_right(avl_node * & root) { rotate_left_chiled(root->right); rotate_right_chiled(root); } void insert(avl_node * & root,int key) { if( root == NULL ) { root = new avl_node(key); } else { if(key < root -> key) { insert(root->left,key); if(height(root->left) - height(root->right) == 2) { if(key < root->left->key) rotate_left_chiled(root); else double_rotate_left(root); } } else { insert(root->right,key); if(height(root->right)-height(root->left) == 2) { if(key>root->right->key) rotate_right_chiled(root); else double_rotate_right(root); } } } root->height=MAX(height(root->left),height(root->right))+1; } int main() { int n; cin>>n; avl_node * root; for(int i=0;i<n;i++) { int node; cin>>node; insert(root,node); } cout<<root->key; return 0; }
相关文章推荐
- libdvbpsi源码分析(四)PAT表解析/重建
- PAT配置
- 什么是端口复用动态地址转换(PAT) 介绍配置实例
- MikroTik layer7-protocol
- PAT是如何工作的
- PAT 乙级题:1002. 写出这个数 (20)
- PAT (Advanced Level) Practise 1001-1010
- 数据结构学习与实验指导(一)
- PAT Basic Level 1001-1010解题报告
- 1001. 害死人不偿命的(3n+1)猜想
- 1002. 写出这个数
- 1032. 挖掘机技术哪家强
- 1001. 害死人不偿命的(3n+1)猜想 (PAT basic)
- 1002. 写出这个数(PAT Basic)
- 1004. 成绩排名(PAT Basic)
- 1006. 换个格式输出整数(PAT Basic)
- 1007. 素数对猜想(PAT Basic)
- 1008. 数组元素循环右移问题
- 1009. 说反话(PAT Basic)
- 1011. A+B和C(PAT Basic)