P1229 遍历问题 【已知先序后序求中序种类】
题目
https://www.luogu.com.cn/problem/P1229
思路
当一个节点只有一个子节点的时候,无论这个子节点是左子树还是右子树,它的先序以及后序遍历都是一样的,所以我们只需要寻找这样的节点个数,之后乘2就行
方法就是先序从前往后找,后序从后往前找,当出现一样的时候,先序的下一个就是该节点的子树,而后序的前一个就是该节点的子树,如果这两个也一样,那么就是上面所说的情况
代码
#include<iostream> #include<cstdio> #include<string> #include<cstring> using namespace std; int main() { string a, b; cin >> a >> b; int amount = 1; for (int i = 0; i < a.length() - 1; i++) { for (int j = 1; j < b.length(); j++) if (a[i] == b[j] && a[i+1] == b[j - 1])amount *= 2; } printf("%d", amount); }