标签:style net pac name break main == scanf empty
PTA
03-树2 List Leaves
1 #include <stdio.h> 2 #include <queue> 3 #define MaxTree 20 4 #define Null -1 5 using namespace std; 6 7 struct TreeNode { 8 int Left; 9 int Right; 10 } T[MaxTree]; 11 int N,check[MaxTree]; 12 int count = 0; 13 14 int BuildTree(struct TreeNode T[]) { 15 int Root = Null,i; 16 char cl,cr; 17 scanf("%d\n",&N); 18 if(N) { 19 for(i=0; i<N; i++) check[i]=0; 20 for(i=0; i<N; i++) { 21 scanf("%c %c\n",&cl,&cr); 22 if(cl==‘-‘ && cr==‘-‘) count++; 23 if(cl!=‘-‘) { 24 T[i].Left = cl-‘0‘; 25 check[T[i].Left]=1; 26 } else T[i].Left=Null; 27 if(cr!=‘-‘) { 28 T[i].Right = cr-‘0‘; 29 check[T[i].Right]=1; 30 } else T[i].Right=Null; 31 } 32 for(i=0; i<N; i++) 33 if(!check[i]) break; 34 Root = i; 35 } 36 return Root; 37 } 38 39 int main() { 40 queue<int> Q; 41 int R,tmp; 42 R=BuildTree(T); 43 if(R==Null) return 0; 44 Q.push(R); 45 while(!Q.empty()) { 46 tmp = Q.front(); 47 Q.pop(); 48 if(T[tmp].Left==-1 && T[tmp].Right==-1){ 49 printf("%d",tmp); 50 count--; 51 if(count!=0) printf(" "); 52 } 53 if(T[tmp].Left!=-1) Q.push(T[tmp].Left); 54 if(T[tmp].Right!=-1) Q.push(T[tmp].Right); 55 } 56 return 0; 57 }
分析:
1、利用队列做层序遍历
2、17行scanf()一开始没写\n,如果只有这一行输入没事,但后面还有scanf(),而%c又是可以识别\n的,所以会导致错误,详见:
scanf()的陷阱
https://blog.csdn.net/ff_tt/article/details/61429268
标签:style net pac name break main == scanf empty
原文地址:https://www.cnblogs.com/cxc1357/p/10809287.html