PAT A1110 Complete Binary Tree ——雨打梨花深闭门
PAT A1110 Complete Binary Tree
- 思路不好,平添烦恼
- 判断是不是完全二叉树,一开始想的是这种树前n-1层是满的,最后一层可能有空位,所以遍历一下记录每层的数量,前几层根据数量判断,最后一层看空位是不是都在后面
- 没考虑细节就开搞了,选用了简单的dfs,判断最后一层时才发现需要定位到最后一个父节点,此时当事人是非常后悔的,要么改成bfs,要么原地想办法补救,后来选择在dfs中收集每层的元素,当根据num得到最后一个父节点的位置后,减去前几层的数量,则可以定位最后一个父节点在所在层数组中的位置(这计算实在好烦,不小心就会多一个少一个),之后根据num的奇偶去看后面的父节点是不是都没有孩子
- 后来看了柳神写的,遍历的时候带一个下标过去,记录最大的下标,等于num则yes ——我好菜啊。。。
#include<iostream>
#include<vector>
#include<string>
#include<cmath>using namespace std;struct Node{int left,right;
};
vector<Node> vn;
vector<bool> shot;
vector<vector<int> > level;
int max_lv = 0;void dfs(int idx,int lv){level[lv].push_back(idx);if(lv > max_lv) max_lv = lv;if(vn[idx].left != -1) dfs(vn[idx].left,lv + 1);if(vn[idx].right != -1) dfs(vn[idx].right,lv + 1);
}int main(){int num;cin >> num;vn.resize(num);shot.resize(num,false);level.resize(num);for(int i = 0;i < num;i ++){string left,right;cin >> left >> right;if(left != "-"){vn[i].left = stoi(left);shot[vn[i].left] = true;}else vn[i].left = -1;if(right != "-"){vn[i].right = stoi(right);shot[vn[i].right] = true;}else vn[i].right = -1;}int root = -1;for(int i = 0;i < num;i ++){if(!shot[i]){root = i;break;}}dfs(root,0);if(num < pow(2,max_lv)){cout << "NO " << root;return 0;} for(int i = 0;i < max_lv;i ++){if(level[i].size() != pow(2,i)){cout << "NO " << root;return 0;}}int lastp = num / 2 - 1;int lv_id = lastp - (pow(2,max_lv - 1) - 1);if(num % 2 == 0){if(vn[level[max_lv - 1][lv_id]].right != -1){cout << "NO " << root;return 0;}}lv_id ++;for(int i = lv_id;i < level[max_lv - 1].size();i ++){if(vn[level[max_lv - 1][i]].left != -1 || vn[level[max_lv - 1][i]].right != -1){cout << "NO " << root;return 0;}}cout << "YES " << level[max_lv][level[max_lv].size() - 1];return 0;
}
PAT A1110 Complete Binary Tree ——雨打梨花深闭门相关推荐
- PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树
文章目录 题目分析 题目链接 题目分析 分析: 按照层序的顺序将完全二叉树存在下标从1开始的数组中.如果是完全二叉树,会将数组中1 ~ n这些位置填满,最大下标就是n,如果最大下标大于n,说明中间有空 ...
- 1110 Complete Binary Tree(甲级)
1110 Complete Binary Tree (25分) Given a tree, you are supposed to tell if it is a complete binary tr ...
- 宋词:一剪梅,雨打梨花深闭门。唐寅
一剪梅,雨打梨花深闭门 唐寅 红满苔阶绿满枝,杜宇声声,杜宇声归.交欢未久又分离,孤凤难飞,孤凤难栖. 别后相思是几时?后会难知,后会难期.此情何以表相思,一首情词,一首情诗. 雨打梨花深闭门,忘了 ...
- 1110 Complete Binary Tree (25分)测试点2,3,4
Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...
- 1110 Complete Binary Tree (25 分)【难度: 一般 / 知识点: 判断完全二叉树】
https://pintia.cn/problem-sets/994805342720868352/problems/994805359372255232 建树并给其赋值,如果是完全二叉树,那么max ...
- 我的周记3——“雨打梨花深闭门,忘了青春,误了青春”
在这里上班这么久 ,这一片去吃饭的路上旁边终于铺满了草, 记录和同事吃完晚饭后去在这里拍拍照谈谈话的时刻 Postman 最详细教程: https://blog.csdn.net/wlly1/arti ...
- PAT甲级1123 Is It a Complete AVL Tree (30分):[C++题解]建立平衡树、bfs,判完全二叉树
文章目录 题目分析 题目链接 题目分析 来源:pat网站 本题作为进阶题,它的基础知识点如下几题. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树 ...
- C++学习之路 | PTA(甲级)—— 1064 Complete Binary Search Tree (30分)(带注释)(精简)
1064 Complete Binary Search Tree (30分) A Binary Search Tree (BST) is recursively defined as a binary ...
- (浙江大学数据结构)PTA Complete Binary Search Tree (10 分)
题目: A Binary Search Tree (BST) is recursively defined as a binary tree which has the following prope ...
最新文章
- HBase regions分布不均匀的解决
- u8api openapi_使用OpenAPI规范进行更好的API测试
- (01)FPGA时序分析概念
- Redis Cluster集群的搭建与实践
- android 应用创建桌面快捷方式
- php session的一些理解
- 时间序列分类算法ST及其实现代码
- IPD产品开发流程详解
- 最新Vue2.0+组件开源项目库集合
- 易语言利用服务器更新,【原创】利用FTP实现软件自动更新
- TeamTalk Base静态库说明
- Vasp 石墨烯能带计算
- bessel 函数乘以指数函数的积分
- postgresql 使用处理 like 'xxoo' 、like 'xxoo%' 、like '%xxoo'、like '%xxoo%'
- Tomcat启动项目出现 javax.el.ELException
- 在 FPGA 上快速构建 PID 算法
- PA,MIOU,FWIOU
- 第一章 TCP/IP 协议
- saltstack grain pillar
- conda 导出环境文件的方法(文件方法)
热门文章
- 精华文稿|用于无监督双目立体匹配学习的视差注意力机制
- 职场生存法则,太精辟了!
- 2019视频编码相关岗位招聘情况
- 【pySerial3.4官方文档】1、pySerial
- html设置flash自适应,SWF自适应布局技巧 (Rapid Flash Development)快速Flash开发
- SpringBoot + 秒杀系统
- 1997年-2017年各省(直辖市、不包含西藏)能源投入(万吨标准煤)
- 10w 行级别Excel数据量导入优化记录
- java conversion_java 基本数据类型之间的转换(Conversion between Java basic data types).doc...
- currency conversion/ 货币转换 / currency translation