1616.判断完全平衡二叉树

2024-03-02 15:20

本文主要是介绍1616.判断完全平衡二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

输入格式
第一行包含整数 N,表示插入序列中元素个数。第二行包含 N个不同的整数表示插入序列。

输出格式
第一行输出得到的AVL树的层序遍历序列。第二行,如果该AVL树是完全二叉树,则输出 YES,否则输出 NO。

数据范围
1≤N≤20

输入样例1:
5
88 70 61 63 65

输出样例1:
70 63 88 61 65
YES

输入样例2:
8
88 70 61 96 120 90 65 68

输出样例2:
88 65 96 61 70 90 120 68
NO

#include<iostream>
using namespace std;
const int N=25;
int l[N],r[N],h[N],v[N],idx; //左子树、右子树、树高、权值、第几个点
int n,root;
int q[N],hh,tt;//队列
int maxk,maxid;//判断完全二叉树
int hight(int u)
{return h[l[u]]-h[r[u]];
}
void update(int u)
{h[u]=max(h[l[u]],h[r[u]])+1;
}
void R(int &u)
{int p=l[u];l[u]=r[p],r[p]=u;update(u),update(p);u=p;
}
void L(int &u)
{int p=r[u];r[u]=l[p],l[p]=u;update(u),update(p);u=p;
}
void insert(int &u,int w) //插入函数
{if(!u) u=++idx,v[u]=w;else if(w<v[u]) //插入到左子树{insert(l[u],w);if(hight(u)==2) {if(hight(l[u])==1) R(u); //LL型,右旋else L(l[u]),R(u); //LR型,先左旋再右旋}}else{insert(r[u],w);if(hight(u)==-2){if(hight(r[u])==-1) L(u); //RR型,左旋else R(r[u]),L(u);}}update(u);
}
void BFS(int u)//层序遍历
{q[hh++]=u;while(tt<hh){int k=q[tt++];if(l[k]) q[hh++]=l[k];if(r[k]) q[hh++]=r[k];cout<<v[k]<<" ";}
}
void check(int u,int k)
{if(!u) return;if(k>maxk){maxk=k;maxid=u;}check(l[u],2*k);check(r[u],2*k+1);
}
int main()
{cin>>n;for(int i=0;i<n;i++){int w;cin>>w;insert(root,w);}BFS(root); //层序遍历check(root,1); //判断是否为完全二叉树if(maxk==n) cout<<endl<<"YES";else cout<<endl<<"NO";return 0;
}

这篇关于1616.判断完全平衡二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766570

相关文章

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个