YES和NO写成了,Yes和No导致了一开始一个点都没有过,哭晕%>_<%
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
struct BST{
int num;
struct BST *left, *right;
} *T;
int Flag;
struct BST *BuildTree(int a[], int n, int flag){
int i;
if (n <= 0)
return NULL;
else {
struct BST *t = new struct BST;
i = 1;
t->num = a[0];
if (flag){
while (i < n&&a[i] < a[0]){
i++;
}
if (i + 1 < n&&a[i + 1] < a[0])
Flag = 1;
}
else {
while (i < n&&a[i] >= a[0]){
i++;
}
if (i + 1 < n&&a[i + 1] >= a[0])
Flag = 1;
}
t->left = BuildTree(&a[1], i - 1, flag);
t->right = BuildTree(&a[i], n - i, flag);
return t;
}
}
void PostPrint(struct BST *t){
if (t){
PostPrint(t->left);
PostPrint(t->right);
if (t == T)
cout << t->num << endl;
else cout << t->num << " ";
}
}
int main(){
int n, i;
freopen("1.in", "r", stdin);
cin >> n;
int *a = new int[n];
for (i = 0; i < n; i++)
cin >> a[i];
int tag;
if (n <=2)
tag = 1;
else if (a[0] > a[1])
tag = 1;
else if (a[0] <= a[1])
tag = 0;
T = BuildTree(a, n, tag);
if (!Flag){
cout << "YES" << endl;
PostPrint(T);
}
else cout << "NO" << endl;
return 0;
}