后缀表达式建树。
#include<iostream>
using namespace std;
const int N = 3333;
int n;
struct Node{
int value;
int left;
int right;
}a[N];
void initialize(Node *p,int n){
for (int i = 0; i < n; i++){
(p+i)->left = i;
(p+i)->right = i;
}
}
void tree(int i,int j){
if (i == j)
return;
else{
if (a[i].value > a[j].value){
if (a[j].right == j)
a[j].right = i;
else
tree(i,a[j].right);
}
else{
if (a[j].left == j)
a[j].left = i;
else
tree(i,a[j].left);
}
}
}
void find(int j){
if (a[j].right != j)
find(a[j].right);
if (a[j].left != j)
find(a[j].left);
if (j == n-1)
cout << a[j].value;
else
cout << a[j].value << " ";
}
int main(){
while (cin >> n){
initialize(a,n);
for (int i = 0; i < n; i++)
cin >> a[i].value;
for (int i = n - 1; i >= 0; i--)
tree(i,n-1);
find(n-1);
}
return 0;
}