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. matlab进入指定目录

    cd C:\Users\hui\Desktop\minepy\1\minepy-1.2.0\minepy-1.2.0\matlab

  2. codeforces 402E - Strictly Positive Matrix【tarjan】

    首先认识一下01邻接矩阵k次幂的意义:经过k条边(x,y)之间的路径条数 所以可以把矩阵当成邻接矩阵,全是>0的话意味着两两之间都能相连,也就是整个都要在一个强连通分量里,所以直接tarjan染 ...

  3. mycat登录报错Host 'XXX' is blocked because of many connection errors的另一种解决思路

    报错时机 使用了mycat,而不是单纯使用了mysql. 报错信息 ERROR 1129 (HY000): Host '1.23.22.18' is blocked because of many c ...

  4. [C++ STL] 常用算法总结

    1 概述 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<alg ...

  5. [Usaco2018 Feb]Snow Boots

    Description 到冬天了,这意味着下雪了!从农舍到牛棚的路上有N块地砖,方便起见编号为1-N,第i块地砖上积了fi英尺的雪.在Farmer John的农舍的地窖中,总共有B双靴子,编号为1-B ...

  6. 常用点击事件(鼠标、光标、键盘、body)

    常用事件: 鼠标: onclick(单击) ondblclick(双击) oncontextmenu(右击) onmouseover onmouseout 光标: onfocus onblur 键盘: ...

  7. encodeURIComponent的用法

    实践出真知,项目中遇到坑,填满后总结:编码不一定需要解码 rsa加密字段(base64位后),通过url?filed=value传输后,总是有+等特殊字符,然后到后端时base64解不开,发现很多空格 ...

  8. MySql学习笔记(2)-简介

    一.什么是MySql MySql是开放源代码的数据库管理系统之一: MySql是一个支持多线程高并发多用户的关系型数据库管理系统: MySql最擅长的是查询性能,而不是事务处理(需要借助第三方存储引擎 ...

  9. IE 浏览器在地址栏输入中文字符,发送get请求报400错误的问题

    因为学校有JavaWeb的课程,所以才接触这方面.最近遇到了个小问题. 先看一段很简单的jsp代码例子 <%@ page language="java" import=&qu ...

  10. oracle创建临时表空间、用户表空间、创建用户关联表空间、授权等

    1.创建临时表空间 CREATE TEMPORARY TABLESPACE test_temp TEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test ...