遍历问题(洛谷 P1229)

本文探讨了二叉树的遍历问题,包括前序、中序和后序遍历,并通过实例说明了如何计算具有特定链结构的二叉树数量。文章提供了一段C++代码,用于解决给定前序和后序遍历结果时,可能的中序遍历序列总数的计算问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遍历问题

题目描述
我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:

所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。

输入格式

输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树的后序遍历结果s2。

输出格式

输出可能的中序遍历序列的总数,结果不超过长整型数。

输入 #1

abc
cba

输出 #1

4

一道结论题:

一条单链,也就是说只有一个儿子的结点组成链,前序遍历和后序一样

怎么判断它有几个那种链呢?前序为AB后序为BA的就是,我们只要暴力遍历一遍就行;

代码:

#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define lson k<<1
#define rson k<<1|1
#define N 500100
#define M 2000010
using namespace std;
string s1,s2;
int main(){
	cin>>s1>>s2;
	int ans=0;
	for(int i=0;i<s1.length()-1;i++){//注意结束位置 
		for(int j=1;j<s2.length();j++){//注意起始位置 
			if(s1[i]==s2[j]&&s1[i+1]==s2[j-1]) ans++;
		}
	}
	cout<<(1<<ans)<<endl;
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值