先由后左 再父 建一个二叉树
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 ",tr[n]); 45 return 0; 46 }