遍历问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相信了解了这一段递推公式,这道遍历问题就变得不再那么烦 琐了。
Hale Waihona Puke Baidu
我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题: 已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的 后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和 后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: a a a a / / \ \ b b b b / \ / \ c c c c 所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。 【输入】 输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树 的后序遍历结果s2。 【输出】 输出可能的中序遍历序列的总数,结果不超过长整型数。 【样例】 trave1.intrave1.out Abc Cba 4
一开始,大家可能会想到简单的搜索方法。
但是,仔细看的话,这道题其实是有一个递推规律的。
首先,确定先序数列s1中第i个字符在后序数列s2中的位置。 而且因为先序数列和后序数列之间有一定的子串是相反的。
所以判断s1[i+1]=s2[pos(s1[i],s2)-1],即判断s1[i]的后一位和s2中 s1[i]的前一位是否相等。如果成立,相当于又可以延伸出另一棵 子树,所以中序遍历的个数又多了一倍。