#include<cstdio>
#include<vector>
using namespace std;
int n;
vector<int> origin, pre, mpre, post,mpost;
struct node
{
int data;
node *left, *right;
};
void insert(node* &root, int data)//根据给定的数据 建出一棵bst
{
if (root == NULL)
{
root = new node;
root->data = data;
root->left = root->right = NULL;
return;
}
else if (data < root->data) insert(root->left, data);
else insert(root->right, data);
}
void preorder(node* root,vector<int> &v)
{
if (root == NULL) return;
v.push_back(root->data);
preorder(root->left, v);
preorder(root->right, v);
}
void mpreorder(node* root, vector<int> &v)
{
if (root == NULL) return;
v.push_back(root->data);
mpreorder(root->right, v);
mpreorder(root->left, v);
}
void postorder(node* root, vector<int> &v)
{
if (root == NULL) return;
postorder(root->left, v);
postorder(root->right, v);
v.push_back(root->data);
}
void mpostorder(node* root, vector<int> &v)
{
if (root == NULL) return;
mpostorder(root->right, v);
mpostorder(root->left, v);
v.push_back(root->data);
}
int main()
{
int temp;
node* root = NULL;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &temp);
origin.push_back(temp);
insert(root, temp);
}
preorder(root, pre);
mpreorder(root, mpre);
if (origin == pre)//vector可以直接用等号判断是否一致
{
printf("YES\n");
postorder(root, post);
for (int i = 0; i < post.size(); i++)
{
printf("%d", post[i]);
if (i != post.size() - 1) printf(" ");
}
}
else if (origin == mpre)
{
printf("YES\n");
mpostorder(root, mpost);
for (int i = 0; i < mpost.size(); i++)
{
printf("%d", mpost[i]);
if (i != mpost.size() - 1) printf(" ");
}
}
else printf("NO\n");
return 0;
}
A1043 Is It a Binary Search Tree (25 分)
最新推荐文章于 2022-03-06 13:36:31 发布