December 10th 模拟赛C T4 二叉树 Solution
2016-12-10 16:31
267 查看
题目空降
遍历一棵二叉树就是按某条搜索路径巡访其中每个节点,使得每个节点均被访问一次,而且仅被访问一次。最常用的有三种遍历方式:
(1)前序遍历:若二叉树为空,则空操作;否则先访问根节点,接着前序遍历左子树,最后前序遍历右子树。
(2)中序遍历:若二叉树为空,则空操作;否则先中序遍历左子树,接着访问根节点,最后再中序遍历右子树。
(3)后序遍历:若二叉树为空,则空操作;否则先后序遍历左子树,接着后序遍历右子树,最后再访问根节点。
例如图1所示的二叉树前序遍历的顺序是ABCD,中序遍历的顺序是CBAD,后序遍历的顺序是CBDA。
对一棵二叉树,如果给出前序遍历和中序遍历的节点访问顺序,那么后序遍历的顺序是唯一确定的,也很方便地求出来。但如果现在只知道前序遍历和后序遍历的顺序,中序遍历的顺序是不确定的,例如:前序遍历的顺序是ABCD,而后序遍历的顺序是CBDA,那么就有两棵二叉树满足这样的顺序,见图1和图2。
现在的问题是给定前序遍历和后序遍历的顺序,要求出总共有多少棵不同形态的二叉树满足这样的遍历顺序。
二叉树的节点用一个大写字母表示,不会有两个节点标上相同字母。输入数据不包含空格,且保证至少有一棵二叉树符合要求。
如果S2里有倒过来后的这两个字符就ANS*2
Description
在众多的数据结构中,二叉树是一种特殊而重要的结构,有着广泛的应用。二叉树或者是一个节点,或者有且仅有一个节点位二叉树的根,其余节点被分成两个互不相交的子集,一个作为左子集,另一个作为右子集。每个子集又是一个二叉树。遍历一棵二叉树就是按某条搜索路径巡访其中每个节点,使得每个节点均被访问一次,而且仅被访问一次。最常用的有三种遍历方式:
(1)前序遍历:若二叉树为空,则空操作;否则先访问根节点,接着前序遍历左子树,最后前序遍历右子树。
(2)中序遍历:若二叉树为空,则空操作;否则先中序遍历左子树,接着访问根节点,最后再中序遍历右子树。
(3)后序遍历:若二叉树为空,则空操作;否则先后序遍历左子树,接着后序遍历右子树,最后再访问根节点。
例如图1所示的二叉树前序遍历的顺序是ABCD,中序遍历的顺序是CBAD,后序遍历的顺序是CBDA。
对一棵二叉树,如果给出前序遍历和中序遍历的节点访问顺序,那么后序遍历的顺序是唯一确定的,也很方便地求出来。但如果现在只知道前序遍历和后序遍历的顺序,中序遍历的顺序是不确定的,例如:前序遍历的顺序是ABCD,而后序遍历的顺序是CBDA,那么就有两棵二叉树满足这样的顺序,见图1和图2。
现在的问题是给定前序遍历和后序遍历的顺序,要求出总共有多少棵不同形态的二叉树满足这样的遍历顺序。
Input
整个输入有两行,第一行给出前序遍历的访问顺序,第二行给出后序遍历的访问顺序。二叉树的节点用一个大写字母表示,不会有两个节点标上相同字母。输入数据不包含空格,且保证至少有一棵二叉树符合要求。
Output
输出一个整数,为符合要求的不同形态的二叉树的数目。Analysis
枚举S1每两个相邻的字符,将其倒过来(比如BC变成CB)如果S2里有倒过来后的这两个字符就ANS*2
Implementation
自行脑补。Code
C++
自行脑补。
Pascal
var x,y:String; ans:longint; procedure dfs(x,y:string;len:longint); begin if (len=1) then exit; if (x[2]=y[2]) then begin ans:=ans*2; dfs(copy(x,2,len-1),copy(y,2,len-1),len-1); exit; end; dfs(copy(x,2,pos(y[2],x)-2),copy(y,pos(x[2],y),len-pos(x[2],y)+1),pos(y[2],x)-2); dfs(copy(x,pos(y[2],x),len-pos(y[2],x)+1),copy(y,2,pos(x[2],y)-2),pos(x[2],y)-2); end; procedure turn(var x:string); var i:Longint; t:string; begin t:=''; for i:=length(x) downto 1 do t:=t+x[i]; x:=t; end; begin assign(input,'init.in');reset(input); //assign(output,'tree.out');rewrite(output); readln(x); readln(y); turn(y); ans:=1; dfs(x,y,Length(x)); writeln(ans); end.
相关文章推荐
- December 10th 模拟赛C T1 分发糖果 Solution
- December 10th 模拟赛C T2 下棋 Solution
- December 10th 模拟赛C T3 X-因子链 Solution
- September 10th 模拟赛C T1 电影票 Solution
- September 10th 模拟赛C T2 火炬手 Solution
- September 10th 模拟赛C T3 雕塑 Solution
- July 14th 模拟赛C T3 灌水 Solution
- July 15th 模拟赛C T1 游泳池 Solution
- July 14th 模拟赛C T4 开花 Solution
- Solution 11: 二叉树中节点的最大距离
- LeetCode 331. Verify Preorder Serialization of a Binary Treet 二叉树前序遍历验证 Python Solution
- September 24th 模拟赛C T1 电费结算 Solution
- July 15th 模拟赛C T2 积木游戏 Solution
- September 3rd 模拟赛C T2 比赛 Solution
- LeetCode 105,106. Construct Binary Tree 重建二叉树 Python Solution
- January 22nd 模拟赛A&B T3 【2014东莞市选】分组 Solution
- September 17th 模拟赛C T1 铁轨 Solution
- 天勤模拟赛1 二叉树问题
- 改造二叉树 (长乐一中模拟赛day2T1)
- June 11th 模拟赛C T1 Sandcas Solution