当前位置: 首页 > news >正文

PAT甲级 1110 Complete Binary Tree

题目链接

PAT甲级 1110 Complete Binary Tree

思路

第一次的写法不是很好。
对于这种完全二叉树的层序遍历,比较烦人的就是空孩子使得处理很麻烦。
思来想去还是把空位置也入队比较好。

这样的话,访问到空指针的时机被推迟了一个level
而完全二叉树的叶子之间的层间距不会超过1
所以对于合法的完全二叉树,我们访问到空孩子的时机不会早于访问树中的任何叶节点

这样的话,当访问到空指针的时候:

  1. 对于合法的完全二叉树,一定树中所有元素都遍历完了,故有n == 0
  2. 若此时仍有n > 0,否则就说明层间有空隙,故不合法。

所以只要在访问到空指针的时候加入我们的判断即可,并记录还未访问的树节点个数。

代码

#include<bits/stdc++.h>using namespace std;vector<int> parent;
vector<pair<int, int>> children;int last = -1;int main() {int n;cin >> n;children.resize(n + 1, {-1, -1});parent.resize(n + 1, -1);for(int i = 0; i < n; ++i) {string left, right;cin >> left >> right;if(left != "-") {children[i].first = stoi(left);parent[stoi(left)] = i;}if(right != "-") {children[i].second = stoi(right);parent[stoi(right)] = i;}}int root = -1;for(int i = 0; i < n; ++i) {if(parent[i] == -1) {root = i;break;}}assert(root != -1);queue<int> q;q.push(root);bool flag = true;while(! q.empty() && flag) {int size = q.size();int pre_is_null = 0;while(size--) {auto node = q.front();q.pop();if(node == -1) {if(n > 0) {flag = false;}break;}last = node;--n;auto left = children[node].first;auto right = children[node].second;q.push(left);q.push(right);}}if(! flag) {cout << "NO " << root;} elsecout << "YES " << last;cout << endl;
}

相关文章:

PAT甲级 1110 Complete Binary Tree

题目链接 PAT甲级 1110 Complete Binary Tree 思路 第一次的写法不是很好。 对于这种完全二叉树的层序遍历&#xff0c;比较烦人的就是空孩子使得处理很麻烦。 思来想去还是把空位置也入队比较好。 这样的话&#xff0c;访问到空指针的时机被推迟了一个level 而完全二叉树的…...

【JavaSE】逻辑控制语句

文章目录一. 顺序结构二. 分支结构1. if 语句2. switch 语句3、循环结构3.1 while 循环3.2 do while 循环3.3 for 循环3.4 break 和 continue三. 输入输出1. 输出到控制台2. 从键盘输入一. 顺序结构 顺序结构比较简单&#xff0c;即程序按照代码书写的顺序一行一行执行下去。 …...

Motionbuilder系统文件说明

安装路径 Motionbuilder 默认的安装路径在 C:\Program Files\Autodesk\MotionBuilder\ 用户数据(user data) 位于安装路径下的 bin\config 非管理员用户的配置文件路径 Motionbuilder会将配置文件备份到 \Users[user]\AppData\Local\Autodesk[MotionBuilder] 当用户第一次打开…...

【我的Android开发】AMS中Activity栈管理

概述 Activity栈管理是AMS的另一个重要功能&#xff0c;栈管理又和Activity的启动模式和startActivity时所设置的Flag息息相关&#xff0c;Activity栈管理的主要处理逻辑是在ActivityStarter#startActivityUnchecked方法中&#xff0c;本文也会围绕着这个方法进进出出&#xf…...

C++源程序的构成————学习笔记

以下内容为&#xff0c;在学校上课时的课堂总结&#xff0c;偶尔我也会扩展一些内容内容仅供参考&#xff0c;欢迎大佬的指正简单的C程序#include <iostream> using namespace std;int main() {int x0;int y 0;cout << "请输入x,y的值"<<endl;cin…...

Spark Catalyst

Spark Catalyst逻辑计划逻辑计划解析逻辑计划优化Catalyst 规则优化过程物理计划Spark PlanJoinSelection生成 Physical PlanEnsureRequirementsSpark SQL 端到端的优化流程&#xff1a; Catalyst 优化器 : 包含逻辑优化/物理优化Tungsten : Spark SQL的优化过程 : 逻辑计划 …...

element 远程搜索下拉加载

created() { this.getList(); this.getGroupList(); }, directives: { /** 下拉框懒加载 */ “el-select-loadmore”: { bind(el, binding) { const SELECTWRAP_DOM el.querySelector( “.el-select-dropdown .el-select-dropdown__wrap” ); SELECTWRAP_DOM.addEventListener…...

空间复杂度与顺序表的具体实现操作(1)

最近更新的少&#xff0c;主要是因为参加了ACM竞赛空间复杂度空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量…...

【springmvc】Rest ful风格

RESTful 1、RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 a>资源 资源是一种看待服务器的方式&#xff0c;即&#xff0c;将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一…...

华为OD机试真题Python实现【用户调度】真题+解题思路+代码(20222023)

用户调度 题目 在通信系统中有一个常见的问题是对用户进行不同策略的调度,会得到不同系统消耗的性能。 假设由N个待串行用户,每个用户可以使用A/B/C三种不同的调度策略。 不同的策略会消耗不同的系统资源,请你根据如下规则进行用户调度,并返回总的消耗资源数。 规则是: …...

JavaSE学习笔记总结day19

今日内容 二、线程安全的集合 三、死锁 四、线程通信 五、生产者消费者 六、线程池 零、 复习昨日 创建线程的几种方式 1) 继承 2) 实现Runnable 3) callable接口 Future接口 4) 线程池 启动线程的方法 start() 线程的几种状态 什么是线程不安全 setName getName Thread.curr…...

FreeSql使用

目的: 1.方库分表 2.主从分离 3.分布式事务 过程&#xff1a; 官网&#xff1a;指南 | FreeSql 官方文档 1.Startup.cs 添加配置&#xff08;本地数据库MySql&#xff09; ConfigureServices&#xff1a; Func<IServiceProvider, IFreeSql> fsql r >{IFreeSql …...

Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决

Hadoop集群搭建&#xff0c;基于3.3.4hadoop和centos8【小白图文教程-从零开始搭建Hadoop集群】&#xff0c;常见问题解决Hadoop集群搭建&#xff0c;基于3.3.4hadoop1.虚拟机的创建1.1 第一台虚拟机的创建1.2 第一台虚拟机的安装1.3 第一台虚拟机的网络配置1.3.1 主机名和IP映…...

UE4 材质学习 (焚烧材质)

效果步骤随便从网上下载一张图片&#xff08;地址&#xff1a;链接/链接&#xff09;&#xff0c;导入UE中新建一个材质函数这里命名为“E_Function”双击打开该材质函数&#xff0c;由于需要输出变发光和变透明两种效果&#xff0c;因此这里需要两个输出节点&#xff1a;分别命…...

【c++】STL常用算法2—常用查找算法

文章目录常用查找算法findfind_ifadjacent_findbinary_searchcountcount_if常用查找算法 算法简介&#xff1a; find//查找元素 find_if//按条件查找元素 adjacent_find//查找相邻重复元素 binary_search//二分查找法 count//统计元素个数 count_if//按条件统计元素个数find …...

史上最全最详细的Java架构师成长路径图,程序员必备

从新手码农到高级架构师&#xff0c;要经过几步&#xff1f;要多努力&#xff0c;才能成为为人倚重的技术专家&#xff1f;本文将为你带来一张程序员发展路径图&#xff0c;但你需要知道的是&#xff0c;天下没有普适的道理&#xff0c;具体问题还需具体分析&#xff0c;实践才…...

第五章 事务管理

1.事务概念 *什么是事务&#xff1a;事务是数据库操作最基本单元&#xff0c;逻辑上是一组操作&#xff0c;要么都成功&#xff0c;要么都失败 *事务的特性&#xff08;ACID&#xff09;&#xff1a;原子性、隔离性、一致性、持久性 2.搭建事务操作环境 *模拟场景&#xff…...

Redis:主从同步

Redis&#xff1a;主从同步一. 概述二. 原理(1) 全量同步(2) 增量同步(3) 优化Redis主从集群三. 总结一. 概述 引入&#xff1a; Redis主从集群采用一个Master负责写&#xff0c;多个Slave负责读的方式&#xff08;读多写少&#xff09;&#xff0c;那么如何让读取数据时多个从…...

Unity Animator.Play(stateName, layer, normalizedTime) 播放动画函数用法

原理 接口&#xff1a; public void Play(string stateName, int layer -1, float normalizedTime float.NegativeInfinity);参数含义stateName动画状态机的某个状态名字layer第几层的动画状态机&#xff0c;-1 表示播放第一个状态或者第一个哈希到的状态normalizedTime从s…...

python学习——【第三弹】

前言 上一篇文章 python学习——【第二弹】中学习了python中的运算符内容&#xff0c;这篇文章接着学习python中的流程控制语句。 流程控制指的是代码运行逻辑、分支走向、循环控制&#xff0c;是真正体现我们程序执行顺序的操作。流程控制一般分为顺序执行、条件判断和循环控…...

让老旧PL-2303串口设备在Windows 10/11重获新生的终极指南

让老旧PL-2303串口设备在Windows 10/11重获新生的终极指南 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为Windows 10或Windows 11系统上无法使用老旧的PL-2303串…...

国产多模态大模型部署利器:深度解析陈天奇技术栈

国产多模态大模型部署利器&#xff1a;深度解析陈天奇技术栈 引言 在国产大模型“百模大战”的喧嚣浪潮中&#xff0c;我们的目光常常被那些能说会道、能文能图的多模态大模型本身所吸引。然而&#xff0c;一个同样关键却容易被忽视的问题是&#xff1a;如何让这些动辄数百亿…...

告别Appium!用Python+uiautomator2搞定Android自动化测试(保姆级环境搭建指南)

告别Appium&#xff01;用Pythonuiautomator2搞定Android自动化测试&#xff08;保姆级环境搭建指南&#xff09; 如果你正在为Appium的复杂配置、缓慢执行速度而头疼&#xff0c;或者厌倦了那些莫名其妙的连接问题&#xff0c;那么是时候尝试更轻量高效的解决方案了。uiautoma…...

ARM架构自托管调试与追踪技术详解

1. ARM架构自托管调试与追踪技术概述在嵌入式系统开发领域&#xff0c;调试技术始终是开发者面临的核心挑战之一。传统JTAG调试方式虽然功能强大&#xff0c;但在生产环境或安全敏感场景中存在明显局限。ARM架构提供的自托管调试(Self-hosted Debug)和追踪(Trace)机制&#xff…...

从DenseNet到特征复用:揭秘密集连接如何重塑卷积网络

1. 密集连接&#xff1a;卷积网络的第三次进化 记得我第一次跑图像分类任务时&#xff0c;用的还是传统的VGG网络。那时候为了提升准确率&#xff0c;只能不断堆叠卷积层&#xff0c;结果模型体积像吹气球一样膨胀到500MB。直到2017年遇到DenseNet&#xff0c;才发现原来只需要…...

收藏!小白程序员必看:大模型时代高薪就业新机遇与学习路径

收藏&#xff01;小白程序员必看&#xff1a;大模型时代高薪就业新机遇与学习路径 2026年中国就业市场面临高校毕业生激增与岗位结构性短缺的矛盾&#xff0c;传统岗位被AI替代&#xff0c;而AI工程师、智能驾驶等高薪岗位却人才紧缺。核心原因是技能断层&#xff0c;企业需要复…...

Live-SWE-agent:首个实时自演化的AI软件工程师智能体

1. 项目概述&#xff1a;当AI学会“边干边学”最近在AI编程领域&#xff0c;一个名为Live-SWE-agent的项目引起了我的注意。简单来说&#xff0c;它试图回答一个非常有趣的问题&#xff1a;我们能否造出一个能“边干边学”的AI软件工程师&#xff1f;这个项目被其团队称为“首个…...

C-Eval中文基准测试到底准不准?3轮人工校验+5类对抗样本验证,真相令人震惊

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C-Eval中文基准测试到底准不准&#xff1f;3轮人工校验5类对抗样本验证&#xff0c;真相令人震惊 C-Eval 作为当前主流的中文大模型评测基准&#xff0c;长期被用于学术论文与工业选型&#xff0c;但其…...

数字孪生软件篇教程(从零入门到工业落地)

前言 在数字孪生行业中,硬件决定真假,软件决定颜值与逻辑。很多新手误区:把数字孪生当成3D建模、做炫酷大屏。 真正工业级软件架构:三维建模 + 后端服务 + 数据中台 + 可视化引擎 + 仿真逻辑。 本篇为配套硬件篇专属软件教程,保持一模一样排版结构、通俗易懂、零基础入…...

如何通过抖店订单接口实现订单状态管理与履约自动化?

对于电商业务管理系统的开发者而言&#xff0c;订单状态的管理是电商履约流程中最核心的环节。当消费者在抖音小店完成下单后&#xff0c;订单会经历支付、发货、收货等多个状态阶段&#xff0c;每个阶段都需要系统做出相应的业务响应。抖店开放平台提供的订单接口体系&#xf…...