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 ——雨打梨花深闭门相关推荐

  1. PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树

    文章目录 题目分析 题目链接 题目分析 分析: 按照层序的顺序将完全二叉树存在下标从1开始的数组中.如果是完全二叉树,会将数组中1 ~ n这些位置填满,最大下标就是n,如果最大下标大于n,说明中间有空 ...

  2. 1110 Complete Binary Tree(甲级)

    1110 Complete Binary Tree (25分) Given a tree, you are supposed to tell if it is a complete binary tr ...

  3. 宋词:一剪梅,雨打梨花深闭门。唐寅

    一剪梅,雨打梨花深闭门  唐寅 红满苔阶绿满枝,杜宇声声,杜宇声归.交欢未久又分离,孤凤难飞,孤凤难栖. 别后相思是几时?后会难知,后会难期.此情何以表相思,一首情词,一首情诗. 雨打梨花深闭门,忘了 ...

  4. 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 ...

  5. 1110 Complete Binary Tree (25 分)【难度: 一般 / 知识点: 判断完全二叉树】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805359372255232 建树并给其赋值,如果是完全二叉树,那么max ...

  6. 我的周记3——“雨打梨花深闭门,忘了青春,误了青春”

    在这里上班这么久 ,这一片去吃饭的路上旁边终于铺满了草, 记录和同事吃完晚饭后去在这里拍拍照谈谈话的时刻 Postman 最详细教程: https://blog.csdn.net/wlly1/arti ...

  7. PAT甲级1123 Is It a Complete AVL Tree (30分):[C++题解]建立平衡树、bfs,判完全二叉树

    文章目录 题目分析 题目链接 题目分析 来源:pat网站 本题作为进阶题,它的基础知识点如下几题. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树 ...

  8. 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 ...

  9. (浙江大学数据结构)PTA Complete Binary Search Tree (10 分)

    题目: A Binary Search Tree (BST) is recursively defined as a binary tree which has the following prope ...

最新文章

  1. HBase regions分布不均匀的解决
  2. u8api openapi_使用OpenAPI规范进行更好的API测试
  3. (01)FPGA时序分析概念
  4. Redis Cluster集群的搭建与实践
  5. android 应用创建桌面快捷方式
  6. php session的一些理解
  7. 时间序列分类算法ST及其实现代码
  8. IPD产品开发流程详解
  9. 最新Vue2.0+组件开源项目库集合
  10. 易语言利用服务器更新,【原创】利用FTP实现软件自动更新
  11. TeamTalk Base静态库说明
  12. Vasp 石墨烯能带计算
  13. bessel 函数乘以指数函数的积分
  14. postgresql 使用处理 like 'xxoo' 、like 'xxoo%' 、like '%xxoo'、like '%xxoo%'
  15. Tomcat启动项目出现 javax.el.ELException
  16. 在 FPGA 上快速构建 PID 算法
  17. PA,MIOU,FWIOU
  18. 第一章 TCP/IP 协议
  19. saltstack grain pillar
  20. conda 导出环境文件的方法(文件方法)

热门文章

  1. 精华文稿|用于无监督双目立体匹配学习的视差注意力机制
  2. 职场生存法则,太精辟了!
  3. 2019视频编码相关岗位招聘情况
  4. 【pySerial3.4官方文档】1、pySerial
  5. html设置flash自适应,SWF自适应布局技巧 (Rapid Flash Development)快速Flash开发
  6. SpringBoot + 秒杀系统
  7. 1997年-2017年各省(直辖市、不包含西藏)能源投入(万吨标准煤)
  8. 10w 行级别Excel数据量导入优化记录
  9. java conversion_java 基本数据类型之间的转换(Conversion between Java basic data types).doc...
  10. currency conversion/ 货币转换 / currency translation