现在的位置: 首页 > 综合 > 正文

PAT (Advanced) 1043. Is It a Binary Search Tree (25)

2018年04月26日 ⁄ 综合 ⁄ 共 1116字 ⁄ 字号 评论关闭
#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');
	}
}

抱歉!评论已关闭.