#include <iostream>
#include <vector>
using namespace std;
struct Node
{
Node *left, *right;
int key;
}node[2005];
int cnt = 0;
Node *create()
{
node[cnt].left = node[cnt].right = nullptr;
return &node[cnt++];
}
Node *insert1(Node *T, int x)
{
if (T == nullptr)
{
T = create();
T->key = x;
}
else
{
if (x < T->key)
T->left = insert1(T->left, x);
else
T->right = insert1(T->right, x);
}
return T;
}
Node *insert2(Node *T, int x)
{
if (T == nullptr)
{
T = create();
T->key = x;
}
else
{
if (x < T->key)
T->right = insert2(T->right, x);
else
T->left = insert2(T->left, x);
}
return T;
}
void preOrder(Node *T, vector<int> &v)
{
v.push_back(T->key);
if (T->left)
preOrder(T->left, v);
if (T->right)
preOrder(T->right, v);
}
void postOrder(Node *T, vector<int> &v)
{
if (T->left)
postOrder(T->left, v);
if (T->right)
postOrder(T->right, v);
v.push_back(T->key);
}
int main()
{
int n;
cin >> n;
vector<int> v, v1, v2, vpost;
int x;
for (int i = 0; i < n; i++)
{
cin >> x;
v.push_back(x);
}
cnt = 0;
Node *T1 = nullptr, *T2 = nullptr;
for (int i = 0; i < n; i++)
{
T1 = insert1(T1, v[i]);
T2 = insert2(T2, v[i]);
}
preOrder(T1, v1);
preOrder(T2, v2);
if (v1 != v && v2 != v)
{
cout << "NO" << endl;
return 0;
}
else
{
cout << "YES" << endl;
if (v1 == v)
postOrder(T1, vpost);
else
postOrder(T2, vpost);
for (int i = 0; i < n; i++)
cout << vpost[i] << (i - n + 1 ? ' ' : '\n');
}
}
PAT (Advanced) 1043. Is It a Binary Search Tree (25)
最新推荐文章于 2022-03-05 17:07:08 发布