对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的二叉树。
两棵二叉树不同当且仅当对于某个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 ;
}

最新文章

  1. Unable to simultaneously satisfy constraints.
  2. CodeBlocks配置文件位置
  3. [iOS Hybrid实践:UIWebView中Html中用JS调用OC方法,OC执行JS代码]
  4. MongoDB学习笔记——索引管理
  5. safari的坑
  6. 5分钟理解iaas paas saas三种云服务区别
  7. POJ2142——The Balance
  8. 2W/月和1W/月的工作,你会怎么选?
  9. cocos2d-x中,简单html富文本显示
  10. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现
  11. 阻塞和非阻塞socket的区别
  12. uva 719 Glass Beads(后缀自动机)
  13. python数据处理——numpy_2
  14. JavaWeb 后端 &lt;四&gt; 之 Cookie HttpSession 学习笔记
  15. 使用Docker跑MySQL 作为Django的存储后端
  16. JavaScript(第八天)【时间与日期】
  17. hdu 4031 attack 线段树区间更新
  18. 目标检测之faster-RCNN和FPN
  19. RabbitMQ in Depth札记——AMQ协议
  20. SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期

热门文章

  1. 快速搭建高可用 LNMP Web应用基础架构
  2. SharePoint 2013 缺少站点保存为模板选项
  3. Python+selenium之测试报告(1)
  4. hiho一下 第四十五周 博弈游戏&#183;Nim游戏&#183;二(转成NIm)
  5. 2017-3-7-lint183-wood-cut
  6. [dp][uestc oj]J - 男神的约会
  7. 导入文件 服务器报错,有可能是 开发时候是window 服务器是linux,两个系统的文件系统的/和\是相反的,要注意这块
  8. MySQL 使用GTID进行复制
  9. Markdown中如何添加特殊符号
  10. virtualbox安装win7系统报错(“FATAL:No bootable medium found!”)