这道题考察了平衡二叉树的建立,这个建立是需要掌握的 另外if 和else if要搞清楚
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
struct node
{
int data;
node* left;
node* right;
}Node[MAXN];
vector<int> preorder;
vector<int> postorder;
vector<int> mirrorPreorder;
vector<int> mirrorPostorder;
void insert(node* &root,int data)
{
if(root == NULL)
{
root = new node;
root -> data = data;
root -> left = root -> right = NULL;
return ;
}
if(data < root->data)
{
insert(root -> left,data);
}
else if(data >= root -> data)
{
insert(root -> right,data);
}
}
void BstpreOrder(node* root)
{
if(root == NULL)
{
return ;
}
preorder.push_back(root -> data);
BstpreOrder(root -> left);
BstpreOrder(root -> right);
}
void BstpostOrder(node* root)
{
if(root == NULL)
{
return ;
}
BstpostOrder(root -> left);
BstpostOrder(root -> right);
postorder.push_back(root -> data);
}
void MirrorpreOrder(node* root)
{
if(root == NULL)
{
return ;
}
mirrorPreorder.push_back(root -> data);
MirrorpreOrder(root -> right);
MirrorpreOrder(root -> left);
}
void MirrorpostOrder(node* root)
{
if(root == NULL)
{
return ;
}
MirrorpostOrder(root -> right);
MirrorpostOrder(root -> left);
mirrorPostorder.push_back(root -> data);
}
int main(void)
{
freopen("pat0314/in.txt","r",stdin);
int n;
cin>>n;
vector<int> temporder;
node* root = NULL;
for(int i = 0;i<n;i++)
{
int num;
cin>>num;
temporder.push_back(num);
insert(root,num);
}
BstpreOrder(root);
BstpostOrder(root);
MirrorpreOrder(root);
MirrorpostOrder(root);
bool flag = false;
// for(int i = 0;i<preorder.size();i++)
// {
// cout<<preorder[i]<<endl;
// }
if(temporder == preorder)
{
flag = true;
cout<<"YES"<<endl;
for(int i = 0;i<postorder.size();i++)
{
if(i == 0)
{
cout<<postorder[i];
}
else
{
cout<<" "<<postorder[i];
}
}
}
else if(temporder == mirrorPreorder)
{
flag = true;
cout<<"YES"<<endl;
for(int i = 0;i<mirrorPostorder.size();i++)
{
if(i == 0)
{
cout<<mirrorPostorder[i];
}
else
{
cout<<" "<<mirrorPostorder[i];
}
}
}
if(flag == false)
{
cout<<"NO";
}
return 0;
}