【题解】P1229
P1229 遍历问题
思路
-
不难发现:如果某个节点只有一个儿子,就会出现不同的中序遍历,所以只需要找有多少个节点只有一个儿子即可;
-
先序遍历中,如果 \(a\) 只有一个儿子 \(b\),那么在先序遍历中一定是
ab
,在后序遍历中一定是ba
; -
设有 \(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;
}