【题解】P1229

P1229 遍历问题

题目传送门

思路

  1. 不难发现:如果某个节点只有一个儿子,就会出现不同的中序遍历,所以只需要找有多少个节点只有一个儿子即可;

  2. 先序遍历中,如果 \(a\) 只有一个儿子 \(b\),那么在先序遍历中一定是ab,在后序遍历中一定是ba

  3. 设有 \(n\) 个节点只有一个儿子,则根据乘法原理,有 \(2^n\) 种不同的中序遍历。

AC code

#include <iostream>
using namespace std;

string a, b;
int len, ans = 1;

int main()
{
	cin >> a >> b;
	len = a.length() - 1;
	for (int i = 0; i < len; i++)
	{
		for (int j = 1; j <= len; j++)
		{
			if (a[i] == b[j] && a[i + 1] == b[j - 1])
			{
				ans *= 2;
			}
		}
	}
	cout << ans;
	return 0;
}
posted @ 2021-08-07 17:33  mango09  阅读(50)  评论(0编辑  收藏  举报
-->