1119. Pre- and Post-order Traversals (30)

#include <iostream>
#include <vector>

using namespace std;

int pre[40], post[40], flag = 1;
vector<int> v;

int getindex(int a, int b, int d)
{
	int i;
	for(i = a + 1; i <= b; i++)
	{
		if(pre[i] == post[d - 1])
		{
			return i;
		}
	}
}

void inorder(int a, int b, int c, int d)
{
	if(a == b)
	{
		v.push_back(pre[a]);
		return;
	}

	int index = getindex(a, b, d);
	int leftcount = index - a - 1;

	if(leftcount > 0)
	{
		inorder(a + 1, a + leftcount, c, c + leftcount - 1);
		v.push_back(pre[a]);
		inorder(a + leftcount + 1, b, c + leftcount, d - 1);
	}
	else
	{
		flag = 0;

		v.push_back(pre[a]);
		inorder(a + 1, b, c, d - 1);
	}
}

void print()
{
	int i, size = v.size();
	for(i = 0; i < size; i++)
	{
		if(i > 0)
		{
			printf(" ");
		}

		printf("%d", v[i]);
	}

	printf("\n");
}

int main()
{
	int n;
	scanf("%d", &n);

	int i;
	for(i = 1; i <= n; i++)
	{
		scanf("%d", &pre[i]);
	}

	for(i = 1; i <= n; i++)
	{
		scanf("%d", &post[i]);
	}

	inorder(1, n, 1, n);

	if(flag == 1)
	{
		printf("Yes\n");
		print();
	}
	else
	{
		printf("No\n");
		print();
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-25 09:06  王景迁  阅读(0)  评论(0)    收藏  举报

导航