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 output the level-order traversal sequence of the resulting AVL tree, and to tell if it is a complete binary tree.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (≤ 20). 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, insert the keys one by one into an initially empty AVL tree. Then first print in a line the level-order traversal sequence of the resulting AVL tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line. Then in the next line, print YES if the tree is complete, or NO if not.

Sample Input 1:

5

88 70 61 63 65

Sample Output 1:

70 63 88 61 65

YES

Sample Input 2:

8

88 70 61 96 120 90 65 68

Sample Output 2:

88 65 96 61 70 90 120 68

NO

#include<iostream>
#include<math.h>
#include<queue>
using namespace std;
struct node{
int value, depth;
node* l=NULL;
node* r=NULL;
node(int v): value(v), depth(0), l(NULL), r(NULL){
}
};
int getheight(node* root){
return root==NULL?0:max(getheight(root->l), getheight(root->r))+1;
} node* RotationLL(node* root){
node* temp=root->l;
root->l=temp->r;
temp->r=root;
temp->depth=getheight(temp);
root->depth=getheight(root);
return temp;
} node* RotationRR(node* root){
node* temp=root->r;
root->r=temp->l;
temp->l=root;
temp->depth=getheight(temp);
root->depth=getheight(root);
return temp;
} node* RotationLR(node* root){
root->l=RotationRR(root->l);
return RotationLL(root);
} node* RotationRL(node* root){
root->r=RotationLL(root->r);
return RotationRR(root);
} node* insert(node* root, int val){
if(root==NULL){
root=new node(val);
return root;
}else if(val<root->value){
root->l=insert(root->l, val);
if(getheight(root->l)-getheight(root->r)==2)
if(val<root->l->value)
root=RotationLL(root);
else
root=RotationLR(root); }else{
root->r=insert(root->r, val);
if(getheight(root->l)-getheight(root->r)==-2)
if(val<root->r->value)
root=RotationRL(root);
else
root=RotationRR(root);
}
root->depth=getheight(root);
return root;
}
int main(){
int n, flag=0, ans=0, first=0;
cin>>n;
node* root=NULL;
for(int i=0; i<n; i++){
int val;
cin>>val;
root=insert(root, val);
}
queue<node*> q;
q.push(root);
while(!q.empty()){
node* temp=q.front();
first++==0?cout<<temp->value:cout<<" "<<temp->value;
q.pop();
if(temp->l!=NULL){
q.push(temp->l);
flag==1?ans=1:ans=ans;
}
else
flag=1;
if(temp->r!=NULL){
q.push(temp->r);
flag==1?ans=1:ans=ans;
}
else
flag=1;
}
cout<<endl;
ans==1?cout<<"NO"<<endl:cout<<"YES"<<endl;
return 0;
}

PAT 1123 Is It a Complete AVL Tree的更多相关文章

  1. PAT 1123. Is It a Complete AVL Tree (30)

    AVL树的插入,旋转. #include<map> #include<set> #include<ctime> #include<cmath> #inc ...

  2. PAT甲级1123. Is It a Complete AVL Tree

    PAT甲级1123. Is It a Complete AVL Tree 题意: 在AVL树中,任何节点的两个子树的高度最多有一个;如果在任何时候它们不同于一个,则重新平衡来恢复此属性.图1-4说明了 ...

  3. 1123 Is It a Complete AVL Tree

    1123 Is It a Complete AVL Tree(30 分) An AVL tree is a self-balancing binary search tree. In an AVL t ...

  4. PAT甲级——1123 Is It a Complete AVL Tree (完全AVL树的判断)

    嫌排版乱的话可以移步我的CSDN:https://blog.csdn.net/weixin_44385565/article/details/89390802 An AVL tree is a sel ...

  5. PAT Advanced 1123 Is It a Complete AVL Tree (30) [AVL树]

    题目 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child ...

  6. 1123. Is It a Complete AVL Tree (30)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  7. PAT A1123 Is It a Complete AVL Tree (30 分)——AVL平衡二叉树,完全二叉树

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  8. 1123 Is It a Complete AVL Tree(30 分)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  9. PAT甲级1123 Is It a Complete AVL Tree【AVL树】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805351302414336 题意: 给定n个树,依次插入一棵AVL ...

随机推荐

  1. IDEA中Spark读Hbase中的数据

    import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.io.ImmutableBytesWr ...

  2. bzoj 1635: [Usaco2007 Jan]Tallest Cow 最高的牛【差分】

    s[i]为差分后的"i这头牛前有几头比它高",计算答案的时候加成前缀和,假设第一头最高减一下即可 用map记录一下被加过的区间,避免重复 #include<iostream& ...

  3. Java经典算法之折半查找(二分法)

    采用二分法时,数据应是有序并且不重复的 与小时候玩的猜数游戏是一样的,会让你猜一个他所想的1~100之间的数,当你猜了一个数后,他会告诉你三种选择中的一个,比他想的大,或小,或猜中了,为了能用最少的次 ...

  4. 关于ListView的注意点

    解决ListView的一些常见问题: 1.listview在拖动的时候背景图片消失变成黑色背景,等到拖动完毕我们自己的背景图片才显示出来 解决:在XML中加入 android:scrollingCac ...

  5. 枚举+贪心 HDOJ 4932 Miaomiao's Geometry

    题目传送门 /* 题意:有n个点,用相同的线段去覆盖,当点在线段的端点才行,还有线段之间不相交 枚举+贪心:有坑点是两个点在同时一条线段的两个端点上,枚举两点之间的距离或者距离一半,尽量往左边放,否则 ...

  6. python批量下载图片

    从数据库拿了一批图片地址,需要一张一张的把图片下载下来,自从有了python,想到能省事就琢磨如何省事. 代码如下: import urllib.requestf=open("E:\999\ ...

  7. Canvas入门笔记-实现极简画笔

    今天学习了Html5 Canvas入门,已经有大神写得很详细了http://www.cnblogs.com/tim-li/archive/2012/08/06/2580252.html#8 在学习过后 ...

  8. WordPress极简主题Small Cat详细介绍

    主题特性: HTML5.CSS3 使用标准语言编写,支持IE10以上浏览器 响应式 在桌面.平板.手机端均以最佳状态显示.也可分享到微信显示哦! 自定义 超过60多个后台自定义设置,让你的站点与众不同 ...

  9. 【译】x86程序员手册26-7.5任务切换

    7.5 Task Switching 任务切换 The 80386 switches execution to another task in any of four cases: 80386在以下四 ...

  10. Lazarus 日志工具 MultiLog

    MultiLog是一种同时以灵活性和低开销为目标的日志系统.顾名思义,它可用于将日志实例到多个目标,如文本文件.可视控件或其他应用程序.添加新的日志目标使用两个方法就可以实现了,其中一个方法是可选的. ...