1110. Complete Binary Tree (25)
来源:互联网 发布:单片机控制mp3播放器 编辑:程序博客网 时间:2024/05/22 17:30
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:97 8- -- -- -0 12 34 5- -- -Sample Output 1:
YES 8Sample Input 2:
8- -4 50 6- -2 3- 7- -- -Sample Output 2:
NO 1
看了柳婼的代码 ,瞬间觉得我写的好烂。。。
首先建树。根据完全二叉树的性质:最后一个有孩子的节点下标为n/2(下标从1开始),那么之前的结点一定都有左右孩子,后面的一定没有孩子,当前节点有没有右孩子由n的奇偶性决定。
一开始偷懒用isdigit(),后来才发现N<=20.。。。
#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{int left;int right;}stu[25];int main(){int n,i;char s1[3],s2[3];scanf("%d",&n);int mark[n];for(i=0;i<n;i++){mark[i]=0;}getchar();for(i=0;i<n;i++){stu[i].left=stu[i].right=-1;scanf("%s %s",s1,s2);//n<=20.....if(strlen(s1)==2){stu[i].left=(s1[0]-'0')*10+s1[1]-'0';mark[stu[i].left]=1;}else{if(s1[0]!='-'){stu[i].left=s1[0]-'0';mark[stu[i].left]=1;} }if(strlen(s2)==2){stu[i].right=(s2[0]-'0')*10+s2[1]-'0';mark[stu[i].right]=1;}else{if(s2[0]!='-'){stu[i].right=s2[0]-'0';mark[stu[i].right]=1;} }getchar();}int root;for(i=0;i<n;i++){if(mark[i]==0){root=i;break;}}queue<int>q;q.push(root);int cou=0,flag=1,last;while(!q.empty()){cou++;int head=q.front();q.pop();if(cou==n){last=head;}if(cou<n/2){if(stu[head].left==-1||stu[head].right==-1){flag=0;break;}}else if(cou==n/2){if(n%2==0){if(stu[head].left==-1||stu[head].right!=-1){flag=0;break;}}else{if(stu[head].left==-1||stu[head].right==-1){flag=0;break;}}}else if(cou>n/2){if(stu[head].left!=-1||stu[head].right!=-1){flag=0;break;}}if(stu[head].left!=-1){q.push(stu[head].left);}if(stu[head].right!=-1){q.push(stu[head].right);}}if(flag==1){printf("YES %d",last);}else{printf("NO %d",root);}}
#include<stdio.h>#include<string.h>#include<ctype.h>#include<queue>using namespace std;struct node{int left;int right;}tree[30];int mark[30]={0};int last;int judge(int root,int n){queue<int>q;q.push(root);int i,cou=0;while(!q.empty()){cou++;if(cou>n){return 1;}int head=q.front();last=head;q.pop();if(head==-1&&cou<=n){return 0;}q.push(tree[head].left);q.push(tree[head].right);}} int main(){int n,i;char s1[4],s2[4];scanf("%d",&n);for(i=0;i<n;i++){tree[i].left=tree[i].right=-1;scanf("%s %s",s1,s2);if(strlen(s1)==2){tree[i].left=(s1[0]-'0')*10+s1[1]-'0';}else if(isdigit(s1[0])){tree[i].left=s1[0]-'0';}if(strlen(s2)==2){tree[i].right=(s2[0]-'0')*10+s2[1]-'0';}else if(isdigit(s2[0])){tree[i].right=s2[0]-'0';}if(tree[i].left!=-1){mark[tree[i].left]=1;}if(tree[i].right!=-1){mark[tree[i].right]=1;}//getchar();}int root;for(i=0;i<n;i++){if(mark[i]==0){root=i;break;}}int flag=judge(root,n);if(flag){printf("YES %d",last);}else{printf("NO %d",root);}}
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree (25)
- 1110. Complete Binary Tree
- 1110. Complete Binary Tree
- 1110. Complete Binary Tree
- PAT-Advanced 1110. Complete Binary Tree (25)
- 遗传算法简介
- 位图
- Android 以太网测试(广播)
- 多线程相关知识梳理
- 由8个整数形成奇特的立方体
- 1110. Complete Binary Tree (25)
- 如何快速比较两张表内同是否相同
- 数据结构与算法各种概念总结-持续更新中
- 预览图,用表单写
- SE38查到DEMO示例程序及ALV示例程序。
- 图像变化,多点触控
- 函数_内部&外部/全局&局部_函数/变量
- java学习心得(-)
- Github和OSChina设置SSH公钥免用户名、密码操作