pat 1066. Root of AVL Tree (25)
来源:互联网 发布:淘宝权女友代直播 编辑:程序博客网 时间:2024/05/26 22:58
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
avl树。
链接:http://www.cppblog.com/cxiaojia/archive/2013/07/22/187776.html
#include<iostream>using namespace std;#include<stdio.h>#include<vector>#include<map>#include<math.h>#include<queue>#include<string.h>#define MS(a,b) memset(a,b,sizeof(a))#include<algorithm>int n;struct node{ int value,height; node *left,*right; node(int u):value(u),left(NULL),right(NULL),height(0){}};int high(node *t){ if(t==NULL)return -1; else return t->height;}bool isbalanced(node *left,node *right){ return abs(high(left)-high(right))<2;}node *Single_LL(node *t2){ node *t1; t1=t2->left; t2->left=t1->right; t1->right=t2; t2->height=max(high(t2->left),high(t2->right))+1; t1->height=max(high(t1->left),high(t1->right))+1; return t1;}node *Single_RR(node *t2){ node *t1; t1=t2->right; t2->right=t1->left; t1->left=t2; t2->height=max(high(t2->left),high(t2->right))+1; t1->height=max(high(t1->left),high(t1->right))+1; return t1;}node *Double_LR(node *t3){ t3->left=Single_RR(t3->left); return Single_LL(t3);}node *Double_RL(node *t3){ t3->right=Single_LL(t3->right); return Single_RR(t3);}node *insert1(int u,node *rt){ if(rt==NULL) { rt=new node(u); return rt; } if(u>rt->value) { rt->right=insert1(u,rt->right); if(!isbalanced(rt->left,rt->right)) if(u>rt->right->value) rt=Single_RR(rt); else rt=Double_RL(rt); } else { rt->left=insert1(u,rt->left); if(!isbalanced(rt->left,rt->right)) if(u<rt->left->value) rt=Single_LL(rt); else rt=Double_LR(rt); } rt->height=max(high(rt->left),high(rt->right))+1; return rt;}int main(){ int i,num; scanf("%d",&n); node *rt=NULL; for(i=0;i<n;i++) { scanf("%d",&num); rt=insert1(num,rt); } printf("%d\n",rt->value); return 0;}
- 【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)
- PAT A1066. Root of AVL Tree (25)
- PAT A 1066. Root of AVL Tree (25)
- 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)
- Android studio中给子类添加构造函数
- Hadoop 提交任务执行流程总结
- StringBuffer 详解 (String系列之3)
- 2016-08-21
- html5 移动端获取触摸点位置学习笔记
- pat 1066. Root of AVL Tree (25)
- 继承的概念、一些基础的语法与类型兼容性原则(基础)
- 【C#】Dictionary和List泛型比较
- 测试的艺术--通用测试案例篇(三)
- 【Linux系统编程】浅谈进程地址空间与虚拟存储空间
- 阻塞与非阻塞的区别
- C#调用非托管C++生成的DLL文件
- 最小生成树(Prim和Kruskal算法)
- Codeforces Round #356 (Div. 2) C. Bear and Prime 100 (有趣的题目)