NEUQ 1022:二叉树
来源:互联网 发布:二维码标签机打印软件 编辑:程序博客网 时间:2024/06/05 14:57
1022: 二叉树
时间限制: 1 Sec 内存限制: 128 MB题目描述
众所周知,遍历一棵二叉树就是按某条搜索路径巡访其中每个结点,使得每个结点均被访问一次,而且仅被访问一次。最常使用的有三种遍历的方式:
1.前序遍历:若二叉树为空,则空操作;否则先访问根结点,接着前序遍历左子树,最后再前序遍历右子树。
2.中序遍历:若二叉树为空,则空操作;否则先中序遍历左子树,接着访问根结点,最后再前中遍历右子树。
3.后序遍历:若二叉树为空,则空操作;否则先后序遍历左子树,接着后序遍历右子树,最后再访问根结点。
现在的问题是给定前序遍历和后序遍历的顺序,要求出总共有多少棵不同形态的二叉树满足这样的遍历顺序。
输入
输入有多组数据,每组数据两行,第一行给出前序遍历的访问顺序,第二行给出后序遍历的访问顺序。
二叉树的结点用一个大写字母表示,不会有两个结点标上相同字母。输入数据不包含空格,且保证至少有一棵二叉树符合要求。
输出
输出一个整数,为符合要求的不同形态二叉树的数目。
样例输入
ABCDCBDA
样例输出
2
提示
来源
递归练习
解析:
一开始读完题后就觉得是数据结构二叉树,感觉很复杂的样子,后来在别人的指导提示下才做出这道题的。
由前后两种遍历不能确定一颗树,是因为前后序遍历中,左子树和右子树(或者说左节点和右节点)在遍历顺序上是相邻的,不像中序遍历那样有根节点可以加以区分。而问题就出现在,若果当前节点是单子树的,在前后序遍历上就无法区分它究竟是左子树还是右子树。若这种情况出现了n次,那么结果就有2的n次方个可能。所以,解决这个问题的关键就转移到了寻找单子树节点的个数上。
通过简单的构图,可以发现对于单子树的存在,根节点和子树节点在前后序遍历上是相邻的,而出现的顺序是相反的。通过这个规律就可以找到这种特殊存在的个数。
LANGUZGE:C++
CODE:
<span style="font-family:Microsoft YaHei;font-size:18px;">#include <iostream>#include <cmath>#include <string.h>#define rep1(i,a,b) for(int i=a;i<b;i++)#define rep2(i,a,b) for(int i=a;i>=b;i--)using namespace std;int main(){ char pre[100005],pos[100005]; while(cin>>pre>>pos){ int len=strlen(pre); int n=0; rep1(i,0,len-1){ rep2(j,len-1,1){ if(pre[i]==pos[j]&&pre[i+1]==pos[j-1]) n++; } } long long ans=pow(2.0,n); cout<<ans<<endl; } return 0;}</span>
- NEUQ 1022:二叉树
- NEUQ 1096: NEUQ的邮票
- neuq 1096 NEUQ的邮票
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛 E: 简单的RMQ【线段树】
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛E(线段树)
- neuq 1024 万能遥控器
- NEUQ 1258: 检查金币
- NEUQ 1269: 第几天
- NEUQ 1256: 核电站问题
- NEUQ 1280:超级楼梯
- NEUQ 1197:三角形
- NEUQ 1287: 防御导弹
- NEUQ 1398: 求和号
- NEUQ 1396: 重建长城
- NEUQ 1229: 密码截获
- NEUQ 1209: 内码对称
- NEUQ 1023: 简单计算器
- NEUQ 1088: Abbreviation
- android非法字符的判定、表情符号的判定
- OC基础:NSString NSNumber 如何学习苹果帮助文档
- 杭电ACM1129——Do the Untwist~~解密 密文
- mysql 学习总结
- Modbus重点部分描述
- NEUQ 1022:二叉树
- 配置NDK Cygwin .bash_profile:行47: 语法错误: 未预期的文件结尾 syntax error: unexpected end of file 解决
- Qt获取控件位置,坐标总结
- VC获取操作系统版本和名称
- TCP打洞技术
- iOS——播放声音和振动
- erlang创建进程
- 长按桌面进入小部件,选择“设置快捷方式”里任意一个添加到桌面,在设置中将语音设置为英语,添加的快捷方式依然是中文
- 线程同步