题目一开始没理解print in the next line the postorder traversal sequence of that tree.我以为是不管是镜像树还是普通树都只要普通树的后序遍历,但其实镜像树要镜像后序遍历…
#include <iostream>
#include <vector>
using namespace std;
struct node{
int data;
node* left;
node* right;
};
vector<int> post,pre,mpre,chart;
node* insert(node* root,int val){
if(root==NULL){
root=new node;
root->data=val;
root->left=root->right=NULL;
}else{
if(root->data<=val){
root->right=insert(root->right,val);
}else{
root->left=insert(root->left,val);
}
}
return root;
}
void postorder(node* root){
if(root==NULL){
return;
}
postorder(root->left);
postorder(root->right);
post.push_back(root->data);
}
void mpostorder(node* root){
if(root==NULL){
return;
}
mpostorder(root->right);
mpostorder(root->left);
post.push_back(root->data);
}
void mpreorder(node* root){
if(root==NULL){
return;
}
mpre.push_back(root->data);
mpreorder(root->right);
mpreorder(root->left);
}
void preorder(node* root){
if(root==NULL){
return;
}
pre.push_back(root->data);
preorder(root->left);
preorder(root->right);
}
int main(){
int n;
cin>>n;
node* root=NULL;
node* mroot=NULL;
for(int i=0;i<n;i++){
int val;
cin>>val;
chart.push_back(val);
root=insert(root,val);
}
preorder(root);
mpreorder(root);
if(pre==chart){
printf("YES\n");
postorder(root);
for(int i=0;i<post.size();i++){
if(i!=0){
printf(" ");
}
printf("%d",post[i]);
}
}else if(mpre==chart){
printf("YES\n");
mpostorder(root);
for(int i=0;i<post.size();i++){
if(i!=0){
printf(" ");
}
printf("%d",post[i]);
}
}else{
printf("NO\n");
}
return 0;
}