1136. Parliament(二叉树)

1136

先由后左 再父 建一个二叉树 

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<stdlib.h>
 5 #include<algorithm>
 6 using namespace std;
 7 #define N 3010
 8 int a[N];
 9 int tr[N];
10 int g;
11 void build(int s,int te,int ro)
12 {
13     if(s==te)
14     {
15         g++;
16         tr[g] = a[s];
17         return ;
18     }
19     int k = te-1,i;
20     for(i = s; i < te ; i++)
21     if(a[i]>ro)
22     {
23         k = i-1;
24         break;
25     }
26     if(k+1<=te-1)
27     build(k+1,te-1,a[te-1]);
28     if(k>=s)
29     build(s,k,a[k]);
30     g++;
31     tr[g] = a[te];
32 }
33 int main()
34 {
35     int i,n;
36     scanf("%d",&n);
37     for(i = 1; i <= n ; i++)
38     {
39         scanf("%d",&a[i]);
40     }
41     build(1,n,a[n]);
42     for(i = 1; i < n ; i++)
43     printf("%d ",tr[i]);
44     printf("%d\n",tr[n]);
45     return 0;
46 }
View Code

 

posted @ 2013-10-04 15:59  _雨  阅读(230)  评论(0)    收藏  举报