二叉树的前序,中序,后序遍历
题目链接:https://www.luogu.com.cn/problem/P1229
题意:
给定一颗二叉树的前序遍历和后序遍历,由于无法确定中序遍历,求这颗二叉树有多少种画法?
二叉树的前序,中序,后序遍历:
前序遍历:先遍历根,再递归遍历左子树,再递归遍历右子树
中序遍历:先遍历左子树,再遍历根,再遍历右子树
后序遍历:先遍历左子树,再遍历右子树,再遍历根
思路:
对于只有一个儿子的节点其可能性有两种,即儿子在左或在右
发现只要前序是AB而后序是BA,那么该节点(A)就只有一个儿子,统计一下作答
void solve(){
string s1,s2;
cin>>s1>>s2;
set<pair<char,char>>st;
for(int i=0;i<s1.size()-1;i++){
st.insert({s1[i],s1[i+1]});
}
int cnt=0;
for(int j=0;j<s2.size()-1;j++){
if(st.count({s2[j+1],s2[j]})){
cnt++;
}
}
cout<<(1<<cnt)<<endl;
}

浙公网安备 33010602011771号