PAT_A1110#Complete Binary Tree
Source:
Description:
Input Specification:
Output Specification:
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:
Attention:
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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |