1066. Root of AVL Tree (25)
来源:互联网 发布:淘宝联盟是骗局吗 编辑:程序博客网 时间:2024/06/16 20:35
1066. Root of AVL Tree (25)
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:588 70 61 96 120Sample Output 1:
70Sample Input 2:
788 70 61 96 120 90 65Sample Output 2:
88
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct nodes{int var;struct nodes* left;struct nodes* right;int hight;}NODE;int Max(int x, int y){if (x > y){return x;}return y;}int Hight(NODE* p){if (p == NULL){return -1;}else{return p->hight;}}NODE* SingleRotateRight(NODE* k2){NODE* k1;k1 = k2->right;k2->right = k1->left;k1->left = k2;k1->hight = Max(Hight(k1->left), Hight(k1->right)) + 1;k2->hight = Max(Hight(k2->left), Hight(k2->right)) + 1;return k1;}NODE* SingleRotateLeft(NODE* k2){NODE* k1;k1 = k2->left;k2->left = k1->right;k1->right = k2;k1->hight = Max(Hight(k1->left), Hight(k1->right)) + 1;k2->hight = Max(Hight(k2->left), Hight(k2->right)) + 1;return k1;}NODE* DoubleRotateLeft(NODE* k3){k3->left = SingleRotateRight(k3->left);return SingleRotateLeft(k3);}NODE* DoubleRotateRight(NODE* k3){k3->right = SingleRotateLeft(k3->right);return SingleRotateRight(k3);}NODE* Insert(NODE* T, int var){if (T == NULL){T = (NODE*)malloc(sizeof(NODE));T->var = var;T->left = NULL;T->right = NULL;T->hight = 0;}else if (var < T->var){T->left = Insert(T->left, var);if (Hight(T->left) - Hight(T->right) == 2){if (var < T->left->var){T = SingleRotateLeft(T);}else{T = DoubleRotateLeft(T);}}}else if (var > T->var){T->right = Insert(T->right, var);if (Hight(T->right) - Hight(T->left) == 2){if (var > T->right->var){T = SingleRotateRight(T);}else{T = DoubleRotateRight(T);}}}T->hight = Max(Hight(T->left), Hight(T->right)) + 1;return T;}int main(){int N, i, var;NODE* root;root = NULL;//freopen("d:\\input.txt", "r", stdin);scanf("%d", &N);for (i = 0; i < N; i++){scanf("%d", &var);root = Insert(root, var);}printf("%d\n", root->var);return 0;}
- 【PAT】1066. Root of AVL Tree (25)
- 【PAT】1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- pat 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25)
- poj 3281
- 【1】Android Service
- 翻转单词顺序列 java
- SPOJ 694 / SPOJ DISUBSTR Distinct Substrings【后缀数组】不相同的子串的个数
- 浅谈人工智能
- 1066. Root of AVL Tree (25)
- 剑指Offer面试题44:扑克牌的顺子 Java实现
- nodejs使用asyn优化的爬取
- Java笔记 - 多线程-单例设计模式
- 从O2O和社交电商的协同效应来重新审视传统实体小店
- SVN 中trunk、branches、tags都什么意思?
- 10-09
- noip2016联考第二场(3&4)总结
- Java 8 in Action (2) -- Stream 流