51nod1832 先序遍历与后序遍历
2024-08-30 08:20:13
对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的二叉树。
两棵二叉树不同当且仅当对于某个x,x的左儿子编号不同或x的右儿子编号不同。
两棵二叉树不同当且仅当对于某个x,x的左儿子编号不同或x的右儿子编号不同。
Input
第一行一个正整数n(3<=n<=10000),表示二叉树的节点数,节点从1到n标号。
第二行n个整数a[i](1<=a[i]<=n),表示二叉树的先序遍历。
第三行n个整数b[i](1<=b[i]<=n),表示二叉树的后序遍历。
Output
输出一个整数表示有多少种方案。保证至少有1种方案。
Input示例
3
1 2 3
2 3 1
Output示例
1
统计出所有的可能(dfs遍历一次足矣),直接按照二叉树的性质,不过有个大数的运算
#include <stdio.h>
#include <string.h>
int pre[];
int post[];
int cc;
void calc(int a1,int b1,int a2,int b2)
{
int i;
if(a1>=b1) return;
for(i=a2; i<=b2-; i++)
{
if(pre[a1+] == post[i]) break;
}
if(i == b2-) cc++;
calc(a1+,a1++(i-a2),a2,i);
calc(a1++(i-a2)+,b1,i+,b2-);
}
int a[];
int main()
{
int n;
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%d",&pre[i]);
for(int i=; i<n; i++)
scanf("%d",&post[i]);
cc=;
calc(,n-,,n-);
n=cc;
int sum=,i,k;
for(i=; i<; i++)
a[i]=;
a[]=;
for(k=; k<=n; k++)
{
for(i=; i<sum; i++)
a[i]=a[i]*;
for(i=; i<sum; i++)
if(a[i]>=)
{
a[i+]=a[i+]+a[i]/;
if(i+==sum)sum++;
a[i]=a[i]%;
}
}
for(i=sum-; i>=; i--)
printf("%d",a[i]);
printf("\n");
return ;
}
最新文章
- Unable to simultaneously satisfy constraints.
- CodeBlocks配置文件位置
- [iOS Hybrid实践:UIWebView中Html中用JS调用OC方法,OC执行JS代码]
- MongoDB学习笔记——索引管理
- safari的坑
- 5分钟理解iaas paas saas三种云服务区别
- POJ2142——The Balance
- 2W/月和1W/月的工作,你会怎么选?
- cocos2d-x中,简单html富文本显示
- 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现
- 阻塞和非阻塞socket的区别
- uva 719 Glass Beads(后缀自动机)
- python数据处理——numpy_2
- JavaWeb 后端 <;四>; 之 Cookie HttpSession 学习笔记
- 使用Docker跑MySQL 作为Django的存储后端
- JavaScript(第八天)【时间与日期】
- hdu 4031 attack 线段树区间更新
- 目标检测之faster-RCNN和FPN
- RabbitMQ in Depth札记——AMQ协议
- SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期
热门文章
- 快速搭建高可用 LNMP Web应用基础架构
- SharePoint 2013 缺少站点保存为模板选项
- Python+selenium之测试报告(1)
- hiho一下 第四十五周 博弈游戏&#183;Nim游戏&#183;二(转成NIm)
- 2017-3-7-lint183-wood-cut
- [dp][uestc oj]J - 男神的约会
- 导入文件 服务器报错,有可能是 开发时候是window 服务器是linux,两个系统的文件系统的/和\是相反的,要注意这块
- MySQL 使用GTID进行复制
- Markdown中如何添加特殊符号
- virtualbox安装win7系统报错(“FATAL:No bootable medium found!”)