PAT 甲级 1066. Root of AVL Tree (25)
来源:互联网 发布:淘宝下载手机版 编辑:程序博客网 时间:2024/06/01 13:21
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 <iostream>#include <vector>#include <algorithm>#include <string>#include <set>using namespace std;struct node {int v, height;node *lchild, *rchild;}*root;node* newNode(int v) {node* Node = new node;Node->v = v;Node->height = 1;Node->lchild = Node->rchild = NULL;return Node;}int getHeight(node* root) {if (root == NULL) return 0;return root->height;}void updateHeight(node* root) {root->height = max(getHeight(root->lchild), getHeight(root->rchild))+1;}int getBalanceFactor(node* root) {return getHeight(root->lchild) - getHeight(root->rchild);}void L(node* &root) {node* temp = root->rchild;root->rchild = temp->lchild;temp->lchild = root;updateHeight(root);updateHeight(temp);root = temp;}void R(node* &root) {node* temp = root->lchild;root->lchild = temp->rchild;temp->rchild = root;updateHeight(root); //为啥子一定要先更新rootupdateHeight(temp);root = temp;}void insert(node* &root, int v) {if (root == NULL) {root = newNode(v);return;}if (v < root->v) {insert(root->lchild, v);updateHeight(root);if (getBalanceFactor(root) == 2) {if (getBalanceFactor(root->lchild) == 1) { //LL型R(root);}else if (getBalanceFactor(root->lchild) == -1) { //LR型L(root->lchild);R(root);}}}else {insert(root->rchild, v);updateHeight(root);if (getBalanceFactor(root) == -2){if (getBalanceFactor(root->rchild) == -1) {L(root);}else if (getBalanceFactor(root->rchild) == 1) {R(root->rchild);L(root);}}}}node* create(int data[], int n) {node* root = NULL;for (int i = 0; i < n; i++) {insert(root, data[i]);}return root;}int main() {int n, v;scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &v);insert(root, v);}printf("%d\n", root->v);return 0; }
- 1066. Root of AVL Tree (25)-PAT甲级真题
- 【PAT甲级】1066. Root of AVL Tree (25)
- 1066. Root of AVL Tree (25) PAT甲级
- 未完成-PAT甲级练习1066. Root of AVL Tree (25)
- PAT甲级1066. Root of AVL Tree (25)
- PAT 甲级 1066. Root of AVL Tree (25)
- 【PAT】1066. Root of AVL Tree (25)
- 【PAT】1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25)
- pat 1066. Root of AVL Tree (25)
- PAT 1066. Root of AVL Tree (25) (AVL树)
- PAT 1066. Root of AVL Tree
- PAT 1066. Root of AVL Tree
- pat(A) 1066. Root of AVL Tree
- PAT 1066. Root of AVL Tree
- 【PAT】1066. Root of AVL Tree
- PAT A1066. Root of AVL Tree (25)
- 十一送iPhoneX、大疆无人机!还能免费修手机!够给力吧!
- html大吐槽 1结构解析
- [BZOJ4827][HNOI2017]礼物(FFT)
- Halcon 学习笔记 (一)
- [BZOJ]1221: [HNOI2001] 软件开发 费用流
- PAT 甲级 1066. Root of AVL Tree (25)
- 学习笔记之genericity
- 搭建环境(四)Ubuntu14.04 安装TensorFlow1.3.0
- 基于ssm框架的个人博客系统(11)--后台开发及前后端数据交互
- Strategy 策略模式 --对象行为型模式
- c++知识点---函数模板实现求数组的最大值
- 腾讯云 云+校园 领取页面
- hibernate HQL
- KMP模板