二叉树的前序,中序,后序遍历

题目链接: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;
}
posted @ 2025-04-02 11:02  Marinaco  阅读(42)  评论(0)    收藏  举报
//雪花飘落效果