PAT1099
/*innner order traverse for BST will be ordered
*1.sort the value in buffer
*2.inner traverse the BST and insert the value
*3.be careful for the formatted output
*4.level traverse output using queue
*/
/*c-style code
* abusing in global variable
*not good encapsulation
*may be possible to use reference for 'start'
*/
1 #include <cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<queue> 5 #define maxn 100 6 using namespace std; 7 typedef struct { 8 int left,right; 9 int value; 10 int inserted; 11 }binode; 12 binode bitree[maxn]; 13 int buf[maxn]; 14 int start=0; 15 queue<int> q; 16 void middle_insert(int root) 17 { 18 if(root==-1)return; 19 middle_insert(bitree[root].left); 20 if(bitree[root].left==-1 || bitree[bitree[root].left].inserted==1) 21 { 22 bitree[root].value=buf[start]; 23 bitree[root].inserted=1; 24 start++; 25 //return ; 26 } 27 middle_insert(bitree[root].right); 28 } 29 void level_traverse() 30 { 31 int i=0; 32 q.push(0); 33 while(!q.empty()) 34 { 35 int tmp=q.front(); 36 buf[i++]=bitree[tmp].value; 37 q.pop(); 38 if(bitree[tmp].left!=-1)q.push(bitree[tmp].left); 39 if(bitree[tmp].right!=-1)q.push(bitree[tmp].right); 40 } 41 } 42 int main() 43 { 44 //freopen("input.txt","r",stdin); 45 int i,n; 46 while(cin>>n) 47 { 48 memset(buf,0,sizeof(buf)); 49 memset(bitree,0,sizeof(bitree)); 50 //fill(bitree,bitree+n,0); parameter must be iterator 51 for(i=0;i<n;i++)scanf(" %d %d",&bitree[i].left,&bitree[i].right); 52 for(i=0;i<n;i++)scanf(" %d",&buf[i]); 53 sort(buf,buf+n); 54 //for(i=0;i<n;i++)printf("%d ",buf[i]); 55 middle_insert(0); 56 //for(i=0;i<n;i++)printf("%d %d %d %d\n",i,bitree[i].left,bitree[i].right,bitree[i].value); 57 level_traverse(); 58 for(i=0;i<n;i++){ 59 if(i<n-1)printf("%d ",buf[i]); 60 else printf("%d\n",buf[i]); 61 } 62 } 63 return 0; 64 }
IMPROVE IN C++
1 #include <cstdio> 2 #include <iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<queue> 6 #define maxn 100 7 using namespace std; 8 typedef struct { 9 int left,right; 10 int value; 11 int inserted; 12 }binode; 13 14 15 binode bitree[maxn]; 16 int buf[maxn]; 17 void middle_insert(int root,int &start) 18 { 19 if(root==-1)return; 20 middle_insert(bitree[root].left,start); 21 if(bitree[root].left==-1 || bitree[bitree[root].left].inserted==1) 22 { 23 bitree[root].value=buf[start]; 24 bitree[root].inserted=1; 25 start++; 26 //return ; 27 } 28 middle_insert(bitree[root].right,start); 29 } 30 void level_traverse(binode bitree[],int buf[]) 31 { 32 queue<int> q; 33 int i=0; 34 q.push(0); 35 while(!q.empty()) 36 { 37 int tmp=q.front(); 38 buf[i++]=bitree[tmp].value; 39 q.pop(); 40 if(bitree[tmp].left!=-1)q.push(bitree[tmp].left); 41 if(bitree[tmp].right!=-1)q.push(bitree[tmp].right); 42 } 43 } 44 int main() 45 { 46 47 freopen("input.txt","r",stdin); 48 int n; 49 while(cin>>n) 50 { 51 memset(buf,0,sizeof(buf)); 52 memset(bitree,0,sizeof(bitree)); 53 for(int i=0;i<n;i++)cin>>bitree[i].left>>bitree[i].right; 54 for(int i=0;i<n;i++)cin>>buf[i]; 55 sort(buf,buf+n); 56 //for(i=0;i<n;i++)printf("%d ",buf[i]); 57 int start=0; 58 middle_insert(0,start); 59 //for(i=0;i<n;i++)printf("%d %d %d %d\n",i,bitree[i].left,bitree[i].right,bitree[i].value); 60 level_traverse(bitree,buf); 61 for(int i=0;i<n;i++){ 62 cout<<buf[i]; 63 i==n-1?cout<<endl:cout<<' '; 64 } 65 } 66 return 0; 67 }

浙公网安备 33010602011771号