P1229 遍历问题

乘法原理应用题
结论:

  1. 对于以S为根的二叉树,如果S既有左孩子又有右孩子,那么对于S而言的中序遍历的种类数 = 左孩子的种类数 * 右孩子的种类数
  2. 对于以S为根的二叉树,如果S只有左孩子或者右孩子,那么对于S而言的中序遍历的种类数 = 左孩子的种类数 * 右孩子的种类数 * 2
  3. 一棵二叉树中的只有一个孩子B(左或右)的结点A的特点:前序遍历中为AB,后序遍历中为BA

所以本题只需要找到所有只有一个孩子的结点数k,答案是\(2^k\)

#include<iostream>
#include<string>

using namespace std;

const int N = 30;

#define LL long long

string a, b;

int main(){
    cin >> a >> b;
    
    LL ans = 1;
    
    for(int i = 0; i < a.size(); i ++)
        for(int j = 1; j < b.size(); j ++)
            if(a[i] == b[j] && a[i + 1] == b[j - 1]) 
                ans *= 2;
            
    cout << ans;
    
    return 0;
}
posted @ 2020-10-25 11:18  yys_c  阅读(123)  评论(0编辑  收藏  举报