pat甲1110. Complete Binary Tree(完全二叉树)
2016-12-09 20:28
274 查看
1110. Complete Binary Tree (25)
时间限制400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
Given a tree, you are supposed to tell if it is a complete binary tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=20) which is the total number of nodes in the tree -- and hence the nodes are numbered from 0 to N-1. Then N lines follow, each corresponds to a node, and gives
the indices of the left and right children of the node. If the child does not exist, a "-" will be put at the position. Any pair of children are separated by a space.
Output Specification:
For each case, print in one line "YES" and the index of the last node if the tree is a complete binary tree, or "NO" and the index of the root if not. There must be exactly one space separating the word and the number.
Sample Input 1:
9 7 8 - - - - - - 0 1 2 3 4 5 - - - -
Sample Output 1:
YES 8
Sample Input 2:
8 - - 4 5 0 6 - - 2 3 - 7 - - - -
Sample Output 2:
NO 1
tips:这道题用到了堆的思想,左儿子的为父亲的二倍,右儿子为父亲的二倍+1;当出现一个节点的>n时,则不是完全二叉树,最为为n的点一定是最后一个结点
#include<iostream> #include<cstring> #include<string> using namespace std; const int maxn=200; int n,rt; int t[maxn][2]; int book[maxn]; int flag=1; void dfs(int x,int cnt) { if(!flag)return; if(cnt>n){ flag=0; return; } if(cnt==n)flag=x; if(t[x][0]!=-1)dfs(t[x][0],cnt*2); if(t[x][1]!=-1)dfs(t[x][1],cnt<<1|1); } int main() { cin>>n; for(int i=0;i<n;i++) { char a[4],aa[4]; scanf("%s %s",a,aa); if(a[0]=='-')t[i][0]=-1; else sscanf(a,"%d",&t[i][0]); if(aa[0]=='-')t[i][1]=-1; else sscanf(aa,"%d",&t[i][1]); book[t[i][0]]=book[t[i][1]]=1; } for(int i=0;i<n;i++)if(!book[i]){ rt=i;break; } dfs(rt,1); if(!flag)cout<<"NO"<<" "<<rt<<endl; else cout<<"YES"<<" "<<flag<<endl; return 0; }
相关文章推荐
- Html页面在手机端出现右边空白
- Linux 中 Kill -2 和 Kill -9 的区别
- RSA算法原理讲得很透彻的两篇文章
- 基于visual c++之windows核心编程代码分析(23)遍历驱动器并获取驱动器属性
- Mybatis中like模糊查询
- ScrollView滑动到底部继续向上滑和滑动到顶部继续向下滑
- Discuz function_core 常用函数解析
- android原生像js一样添加edittext
- 【8月】Hey,English
- Hadoop上传文件报错: name node is in safe mode
- bzoj 2090 [Poi2010]Monotonicity 2 树状数组 dp 贪心
- 基于visual c++之windows核心编程代码分析(22)Mapping File编程
- Contour Detection and Hierarchical Image Segmentation(续)
- Android开发——使用BaseAdapter做一个简单的新闻效果
- 【python3.5问题解决】安装Django
- 基于visual c++之windows核心编程代码分析(21)获取和设置环境变量
- 一周的总结
- 基于visual c++之windows核心编程代码分析(20) 纤程与线程的互相转换
- 模板temp1
- Min Stack_栈_保存最小值(用数组)