标签:right PAT Complete int tree A1110 include root left
Source:
Description:
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 (≤) 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, orNO
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
Keys:
- 完全二叉树(Complete Binary Tree)
Attention:
- atoi(s.c_str()); 字符串转化为int,atof 对应 double,atoll 对应 long long;
- 含非数字则截取前面的数字部分,首字符非数字则返回0
Code:
1 #include<cstdio> 2 #include<string> 3 #include<queue> 4 #include<iostream> 5 using namespace std; 6 const int M=25; 7 int h[M]={0}; 8 struct node 9 { 10 int left,right; 11 }tree[M]; 12 13 bool isComplete(int root, int &last) 14 { 15 queue<int> q; 16 q.push(root); 17 while(!q.empty()) 18 { 19 root = q.front(); 20 q.pop(); 21 if(root != -1) 22 { 23 last = root; 24 q.push(tree[root].left); 25 q.push(tree[root].right); 26 } 27 else 28 { 29 while(!q.empty()) 30 { 31 if(q.front() != -1) 32 return false; 33 q.pop(); 34 } 35 } 36 } 37 return true; 38 } 39 40 int main() 41 { 42 #ifdef ONLINE_JUDGE 43 #else 44 freopen("Test.txt", "r", stdin); 45 #endif 46 47 int n,root,last; 48 scanf("%d", &n); 49 for(int i=0; i<n; i++) 50 { 51 string l,r; 52 cin >> l >> r; 53 if(l == "-") 54 tree[i].left=-1; 55 else{ 56 tree[i].left = atoi(l.c_str()); 57 h[tree[i].left]=1; 58 } 59 if(r == "-") 60 tree[i].right=-1; 61 else{ 62 tree[i].right = atoi(r.c_str()); 63 h[tree[i].right]=1; 64 } 65 } 66 for(int i=0; i<n; i++){ 67 if(h[i]==0){ 68 root=i; 69 break; 70 } 71 } 72 if(isComplete(root, last)) 73 printf("YES %d", last); 74 else 75 printf("NO %d", root); 76 77 return 0; 78 }
标签:right,PAT,Complete,int,tree,A1110,include,root,left 来源: https://www.cnblogs.com/blue-lin/p/11032261.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。