#include <iostream>
#include <vector>
#include <bitset>
#include <cstdio>
using namespace std;
vector<int> a;
struct node{
int val;
struct node *parent,*left,*right;
};
vector<node> b(3001);
void find(node* root,int l,int r,int &k){
if(l>r)return;
if(l==r){
if(root->val>a[l])
root->left=NULL,root->right=&b[k];
else root->left=&b[k],root->right=NULL;
b[k].parent=root;
b[k].left=b[k].right=NULL;
b[k].val=a[l];
k++;
return;
}
int i=l;
for(;i<=r;i++)
if(a[i]>root->val)
break;
if(i==l){
root->left=NULL;
root->right=&b[k];
b[k].parent=root;
b[k].val=a[r];
k++;
find(&b[k-1],l,r-1,k);
}
else if(i>r){
root->right=NULL;
root->left=&b[k];
b[k].parent=root;
b[k].val=a[r];
k++;
find(&b[k-1],l,r-1,k);
}
else{
i--;
b[k].val=a[i];
b[k].parent=root;
root->left=&b[k];
k++;
find(&b[k-1],l,i-1,k);
b[k].val=a[r];
b[k].parent=root;
root->right=&b[k];
k++;
find(&b[k-1],i+1,r-1,k);
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
a.push_back(x);
}
node* root=new node();
root->val=a[n-1];
int k=0;
find(root,0,n-2,k);
// cout<<n<<' '<<k<<endl;
// for(int i=0;i<k;i++)
// cout<<b[i].val<<endl;
for(int i=k-1;i>=0;i--)
cout<<b[i].val<<endl;
cout<<root->val<<endl;
}
#include <vector>
#include <bitset>
#include <cstdio>
using namespace std;
vector<int> a;
struct node{
int val;
struct node *parent,*left,*right;
};
vector<node> b(3001);
void find(node* root,int l,int r,int &k){
if(l>r)return;
if(l==r){
if(root->val>a[l])
root->left=NULL,root->right=&b[k];
else root->left=&b[k],root->right=NULL;
b[k].parent=root;
b[k].left=b[k].right=NULL;
b[k].val=a[l];
k++;
return;
}
int i=l;
for(;i<=r;i++)
if(a[i]>root->val)
break;
if(i==l){
root->left=NULL;
root->right=&b[k];
b[k].parent=root;
b[k].val=a[r];
k++;
find(&b[k-1],l,r-1,k);
}
else if(i>r){
root->right=NULL;
root->left=&b[k];
b[k].parent=root;
b[k].val=a[r];
k++;
find(&b[k-1],l,r-1,k);
}
else{
i--;
b[k].val=a[i];
b[k].parent=root;
root->left=&b[k];
k++;
find(&b[k-1],l,i-1,k);
b[k].val=a[r];
b[k].parent=root;
root->right=&b[k];
k++;
find(&b[k-1],i+1,r-1,k);
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
a.push_back(x);
}
node* root=new node();
root->val=a[n-1];
int k=0;
find(root,0,n-2,k);
// cout<<n<<' '<<k<<endl;
// for(int i=0;i<k;i++)
// cout<<b[i].val<<endl;
for(int i=k-1;i>=0;i--)
cout<<b[i].val<<endl;
cout<<root->val<<endl;
}
Comments
Post a Comment