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);
}

猜你喜欢

转载自www.cnblogs.com/Jason66661010/p/13201150.html