博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
纪中21日c组T1 1575. 二叉树
阅读量:5273 次
发布时间:2019-06-14

本文共 1898 字,大约阅读时间需要 6 分钟。

1575. 二叉树

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

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

题目描述

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

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

输入

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

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

输出

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

样例输入

ABCDCBDA

样例输入

2

数据范围限制

题目中又没有……

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

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

Solution

Algorithm1

暴力枚举2n呵呵

Code1

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

预计分数:100分左右

Algorithm2

找规律

只看前序和后序遍历

这两种遍历方式是反着的

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

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

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

所以

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

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

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

Code2

bxd……不想打

呵呵

Algorithm3

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

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

所以建立一个邻接矩阵

把左序中相邻的点连上

再一样的扫描右序,

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

若存在,答案*2

这个方法我喜欢……

Code3

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #define IL inline11 using namespace std;12 IL int read()13 {14 int res=0;15 char ch=getchar();16 while(ch<'0'||ch>'9')17 ch=getchar();18 while(ch>='0'&&ch<='9')19 res=(res<<1)+(res<<3)+(ch^48),ch=getchar();20 return res;21 }22 23 string a,b;24 int ans=1;25 bool memory[26][26];26 int main()27 {28 // freopen("tree.in","r",stdin);29 // freopen("tree.out","w",stdout);30 cin>>a>>b;31 for(int i=0;i

End

转载于:https://www.cnblogs.com/send-off-a-friend/p/11388599.html

你可能感兴趣的文章
hadoop 使用java操作hdfs
查看>>
中年男人 中年女人 中年人
查看>>
GoFramework框架简介(三)通信机制篇
查看>>
python全栈学习--day31(正则)
查看>>
h.264语法结构分析
查看>>
基督-神[上帝]的道,真理的本真归回
查看>>
https请求抛出异常
查看>>
chrome浏览器更换favicon.ico后不更新缓存解决方案
查看>>
面试试题 一 (排列组合)
查看>>
CString转char*实现方法
查看>>
Go直接调用C函数
查看>>
Mac 系统环境变量配置
查看>>
《你的灯亮着吗?:发现问题的真正所在》读书笔记2
查看>>
Winform开发框架之权限管理系统功能介绍
查看>>
从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境
查看>>
视图的定义、更新、撤销
查看>>
iOS之页面传值-----单例传值、通知传值
查看>>
数组换位子
查看>>
软件测试草图
查看>>
一个App项目设计开发完整流程
查看>>