PAT甲级1123. Is It a Complete AVL Tree
PAT甲级1123. Is It a Complete AVL Tree
题意:
在AVL树中,任何节点的两个子树的高度最多有一个;如果在任何时候它们不同于一个,则重新平衡来恢复此属性。图1-4说明了旋转规则。
现在给出一系列插入,
您应该输出生成的AVL树的级别遍历序列,并告知它是否是完整的二叉树。
输入规格:
每个输入文件包含一个测试用例。对于每种情况,第一行包含正整数N(<= 20)。
一行中的所有数字都以空格分隔。
输出规格:
对于每个测试用例,将键逐个插入到初始空的AVL树中。然后首先在一行中打印生成的AVL树的级别遍历序列。
并且行尾没有额外的空间。然后在下一行中,如果树完成,打印“是”,否则打印“否”。
思路:
AVL.上次做过一道关于AVL的要会写AVL旋转的模板就好了。最后输出是否是平衡二叉树就ok。
ac代码:
C++
// pat1123.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<stdio.h>
#include<map>
#include<cmath>
#include<unordered_map>
#include<unordered_set>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
int height;
TreeNode(int x) : val(x) , left(NULL) , right(NULL) , height(0) {}
};
int count_height(TreeNode*& node)
{
if (!node) return -1;
else return node->height;
}
void LL(TreeNode* &root)
{
TreeNode* temp = root->left;
root->left = temp->right;
temp->right = root;
root->height = max(count_height(root->right), count_height(root->left)) + 1;
temp->height = max(count_height(temp->right), count_height(temp->left)) + 1;
root = temp;
}
void RR(TreeNode* &root)
{
TreeNode* temp = root->right;
root->right = temp->left;
temp->left = root;
root->height = max(count_height(root->right), count_height(root->left)) + 1;
temp->height = max(count_height(temp->right), count_height(temp->left)) + 1;
root = temp;
}
void RL(TreeNode* &root)
{
LL(root->right);
RR(root);
}
void LR(TreeNode* &root)
{
RR(root->left);
LL(root);
}
void insert(int val,TreeNode* &root)
{
if (!root)
{
root = new TreeNode(val);
return;
}
if (root->val < val)
{
insert(val, root->right);
if (count_height(root->right) - count_height(root->left) > 1)
{
if (val > root->right->val) RR(root);
else RL(root);
}
}
else
{
insert(val, root->left);
if (count_height(root->left) - count_height(root->right) > 1)
{
if (val > root->left->val) LR(root);
else LL(root);
}
}
root->height = max(count_height(root->left), count_height(root->right)) + 1;
}
int main()
{
int n,val;
scanf("%d", &n);
TreeNode* root = NULL;
for (int i = 0; i < n; i++)
{
scanf("%d", &val);
insert(val, root);
}
//level order traversal
queue<TreeNode*> q;
q.push(root);
vector<TreeNode*> level_order(1,NULL);
while (!q.empty())
{
TreeNode* top = q.front();
q.pop();
level_order.push_back(top);
if (top->left) q.push(top->left);
if (top->right) q.push(top->right);
}
for (int i = 1; i < n; i++)
printf("%d ", level_order[i]->val);
printf("%d\n", level_order[n]->val);
//is complete
bool flag = true;
for (int i = 1; i <= n; i++)
{
if (2 * i <= n && (!level_order[i]->left || level_order[i]->left->val != level_order[2 * i]->val))
{
flag = false;
break;
}
else if(2 * i + 1 <= n && (!level_order[i]->right || level_order[i]->right->val != level_order[2 * i + 1]->val))
{
flag = false;
break;
}
}
if (flag) printf("YES\n");
else printf("NO\n");
return 0;
}
PAT甲级1123. Is It a Complete AVL Tree的更多相关文章
- 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 ...
- PAT甲级1123 Is It a Complete AVL Tree【AVL树】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805351302414336 题意: 给定n个树,依次插入一棵AVL ...
- PAT甲级——A1123 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 ...
- 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 ...
- 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 ...
- PAT 1123 Is It a Complete AVL Tree
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- 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 ...
- 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 ...
- PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6806292.html特别不喜欢那些随便转载别人的原创文章又不给 ...
随机推荐
- 非极大值抑制(NMS,Non-Maximum Suppression)的原理与代码详解
1.NMS的原理 NMS(Non-Maximum Suppression)算法本质是搜索局部极大值,抑制非极大值元素.NMS就是需要根据score矩阵和region的坐标信息,从中找到置信度比较高的b ...
- ios 个人开发者账户 给其他团队用坑爹的教程
最新版本的 ios 支持 3个开发者证书 和 3个发布者证书 ,如果是多余3台电脑设备要真机调试,就比较麻烦 (手机支持100个设备) 解决方案就是: 在别人的电脑上要成功安装,须具备两个文件: ...
- html5拖拽初窥
说到拖动,大概有两种方式,一种是js实现,之前已经介绍过,今天来讲解另外一种方式,那就是使用html5实现拖动. css样式 .box { width: 200px; height: 200px; b ...
- MyBatis3.4.0以上的分页插件错误:Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.stateme
错误: Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named p ...
- UVA10212 【The Last Non-zero Digit.】
暴力可做!!!(十秒还不打暴力!!!)暴力算阶乘边算边取余上代码 #include<iostream> #define int long long //开long long using n ...
- Ubuntu 搭建ELK
一.简介 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/curr ...
- Owin 自定义中间件
/// <summary> /// 自定义的中间件 /// </summary> public class CustomMiddleware : OwinMiddleware ...
- day5模块学习--configparser模块
使用ConfigParser模块读写ini文件(http://blog.csdn.net/linda1000/article/details/11729561) ConfigParserPyth ...
- ASP.NET MVC之Ajax如影随行
一.Ajax的前世今生 我一直觉得google是一家牛逼的公司,为什么这样说呢?<舌尖上的中国>大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种 ...
- Caffe训练AlexNet网络,精度不高或者为0的问题结果
当我们使用Caffe训练AlexNet网络时,会遇到精度一值在低精度(30%左右)升不上去,或者精度总是为0,如下图所示: 出现这种情况,可以尝试使用以下几个方法解决: 1.数据样本量是否太少,最起码 ...