1575. 二叉树

(File IO): input:tree.in output:tree.out

时间限制: 1000 ms  空间限制: 262144 KB  具体限制  

Goto ProblemSet

题目描述

在众多的数据结构中,二叉树是一种特殊而重要的结构,有着广泛的应用。二叉树或者是一个节点,或者有且仅有一个节点位二叉树的根,其余节点被分成两个互不相交的子集,一个作为左子集,另一个作为右子集。每个子集又是一个二叉树。
遍历一棵二叉树就是按某条搜索路径巡访其中每个节点,使得每个节点均被访问一次,而且仅被访问一次。最常用的有三种遍历方式:
(1)前序遍历:若二叉树为空,则空操作;否则先访问根节点,接着前序遍历左子树,最后前序遍历右子树。
(2)中序遍历:若二叉树为空,则空操作;否则先中序遍历左子树,接着访问根节点,最后再中序遍历右子树。
(3)后序遍历:若二叉树为空,则空操作;否则先后序遍历左子树,接着后序遍历右子树,最后再访问根节点。

例如图1所示的二叉树前序遍历的顺序是ABCD,中序遍历的顺序是CBAD,后序遍历的顺序是CBDA。
对一棵二叉树,如果给出前序遍历和中序遍历的节点访问顺序,那么后序遍历的顺序是唯一确定的,也很方便地求出来。但如果现在只知道前序遍历和后序遍历的顺序,中序遍历的顺序是不确定的,例如:前序遍历的顺序是ABCD,而后序遍历的顺序是CBDA,那么就有两棵二叉树满足这样的顺序,见图1和图2。
现在的问题是给定前序遍历和后序遍历的顺序,要求出总共有多少棵不同形态的二叉树满足这样的遍历顺序。

输入

整个输入有两行,第一行给出前序遍历的访问顺序,第二行给出后序遍历的访问顺序。

二叉树的节点用一个大写字母表示,不会有两个节点标上相同字母。输入数据不包含空格,且保证至少有一棵二叉树符合要求。

输出

输出一个整数,为符合要求的不同形态的二叉树的数目。

样例输入

ABCD
CBDA

样例输入

2

数据范围限制

题目中又没有……

我来补充吧:长度不会超过26.因为

二叉树的节点用一个大写字母表示,不会有两个节点标上相同字母

Solution

Algorithm1

暴力枚举2n呵呵

Code1

这么简单……我也不想打了

Code1

预计分数:100分左右

Algorithm2

找规律

只看前序和后序遍历

这两种遍历方式是反着的

也就是说,对于每一颗树,

在左序中是根节点->左节点->右节点;

在右序中是右节点->左节点->根节点。

所以

将左序从左开始,右序从右开始

相同的就直接去掉(说明是根节点)

不相同的话就从中剖开,分治再这样弄

Code2

bxd……不想打

呵呵

Algorithm3

因为相邻的点(父子关系)必定在一起

无论是左序还是右序(只是反过来了)

所以建立一个邻接矩阵

把左序中相邻的点连上

再一样的扫描右序,

看看相邻点的反向边是否存在

若存在,答案*2

这个方法我喜欢……

Code3

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define IL inline
using namespace std;
IL int read()
{
int res=;
char ch=getchar();
while(ch<''||ch>'')
ch=getchar();
while(ch>=''&&ch<='')
res=(res<<)+(res<<)+(ch^),ch=getchar();
return res;
} string a,b;
int ans=;
bool memory[][];
int main()
{
// freopen("tree.in","r",stdin);
// freopen("tree.out","w",stdout);
cin>>a>>b;
for(int i=;i<a.size()-;i++)
memory[a[i]-'A'][a[i+]-'A']=;
for(int i=;i<b.size()-;i++)
if(memory[b[i+]-'A'][b[i]-'A']) ans*=;
cout<<ans;
return ;
}

End

纪中21日c组T1 1575. 二叉树的更多相关文章

  1. 纪中21日c组模拟赛

    AWSL  AWSL  AWSL  AWSL AWSL  AWSL  AWSL  AWSL AWSL  AWSL  AWSL  AWSL AWSL  AWSL  AWSL  AWSL 题解传送 T1  ...

  2. 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并

    洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...

  3. 纪中21日c组T2 2117. 【2016-12-30普及组模拟】台风

    2117. 台风 (File IO): input:storm.in output:storm.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto Proble ...

  4. 纪中21日T3 2118. 【2016-12-30普及组模拟】最大公约数

    纪中21日T3 2118. 最大公约数 (File IO): input:gcd.in output:gcd.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto ...

  5. 纪中23日c组T2 2159. 【2017.7.11普及】max 洛谷P1249 最大乘积

    纪中2159. max 洛谷P1249 最大乘积 说明:这两题基本完全相同,故放在一起写题解 纪中2159. max (File IO): input:max.in output:max.out 时间 ...

  6. 纪中23日c组T3 2161. 【2017.7.11普及】围攻 斐波那契数列

    2161. 围攻 (File IO): input:siege.in output:siege.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   Goto Prob ...

  7. 纪中20日c组模拟赛T1 2121. 简单游戏

    T1 2121. 简单游戏 (File IO): input:easy.in output:easy.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto Pro ...

  8. 纪中18日c组模拟赛

    T2 GMOJ2127. 电子表格 (File IO): input:excel.in output:excel.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   ...

  9. 纪中20日c组T2 2122. 【2016-12-31普及组模拟】幸运票

    2122. 幸运票 (File IO): input:tickets.in output:tickets.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto P ...

随机推荐

  1. linux安装mariadb

    yum install -y mariadb-server 账号:root 密码:空 本地登录:mysql -u root -p 远程登录:mysql -h 192.168.0.1 -u root - ...

  2. 读取纯真IP数据库

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <stdli ...

  3. Codeforces_801

    A.直接暴力就行了,先把能组合的按线性组合掉,再枚举剩下相邻没用过的. #include<bits/stdc++.h> using namespace std; string s; ] = ...

  4. 2020你还不会Java8新特性?

    Java8(1)新特性介绍及Lambda表达式 前言: 跟大娃一块看,把原来的电脑拿出来放中间看视频用 --- 以后会有的课程 难度 深入Java 8 难度1 并发与netty 难度3 JVM 难度4 ...

  5. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第六节:反爬策略研究

    之前的章节也略有提及反爬策略,本节,我们就来系统的对反爬.反反爬的种种,做一个了结. 从防盗链说起: 自从论坛兴起的时候,网上就有很多人会在论坛里发布一些很棒的文章,与当下流行的“点赞”“分享”一样, ...

  6. Iterator Protocol - Python 描述符协议

    Iterator Protocol - Python 描述符协议 先看几个有关概念, iterator 迭代器, 一个实现了无参数的 __next__ 方法, 并返回 '序列'中下一个元素,在没有更多 ...

  7. rabbitmq在kubernetes中持久化集群部署

    背景 Javashop电商系统的消息总线使用的事rabbitmq,在订单创建.静态页生成.索引生成等等业务中大量采用异步消息系统,这个对于mq高可用的要求有两个重要的考量: 1.集群化 2.可扩容 3 ...

  8. Spring源码阅读笔记01:源码阅读环境准备

    1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...

  9. python OpenCV安装

    linux系统 yum install -y libSM.x86_64 libXext.x86_64 libXrender.x86_64 pip install numpy Matplotlib pi ...

  10. 神奇的 SQL 之 WHERE 条件的提取与应用

    开心一刻 小明:为什么中国人结婚非要选一个好日子呢 ? 楼主:嗯 ? 那肯定啊,结完婚之后你还能有好日子吗 ? 小明:那结婚时所说的白头到老是真的吗 ? 楼主:这哪能是真的,你看现在,头发还没白就秃了 ...