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

 

你可能感兴趣的:(二叉树)