已知二叉树先序遍历和后序遍历序列,求可能的中序遍历序列及方案数
Posted 牧空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知二叉树先序遍历和后序遍历序列,求可能的中序遍历序列及方案数相关的知识,希望对你有一定的参考价值。
分析
参考
理论依据在参考中,这里简单说明一下
假
设
先
序
遍
历
序
列
为
P
r
e
,
后
序
遍
历
的
序
列
为
P
o
s
t
记
其
中
一
个
结
点
为
v
,
则
在
P
r
e
中
存
在
以
v
为
开
头
的
最
长
后
缀
P
v
使
得
在
P
o
s
t
中
有
以
v
为
结
尾
的
最
长
前
缀
S
v
与
P
v
中
元
素
相
同
假设先序遍历序列为Pre,后序遍历的序列为Post\\\\ 记其中一个结点为v,则在Pre中存在以v为开头的最长后缀P_v\\\\ 使得在Post中有以v为结尾的最长前缀S_v与P_v中元素相同
假设先序遍历序列为Pre,后序遍历的序列为Post记其中一个结点为v,则在Pre中存在以v为开头的最长后缀Pv使得在Post中有以v为结尾的最长前缀Sv与Pv中元素相同
对于树
先序为ABDECF
后序为DEBFCA
以C为例,对于先序C之后不会出现B来干扰,所以不会
P
v
P_v
Pv和
S
v
S_v
Sv不会将兄弟结点加进来
已
经
获
取
了
P
v
和
S
v
,
如
果
P
v
的
第
一
个
元
素
等
于
S
v
的
倒
数
第
一
个
元
素
说
明
v
只
有
一
个
子
树
,
那
么
类
型
数
量
就
要
翻
倍
已经获取了P_v和S_v,如果P_v的第一个元素等于S_v的倒数第一个元素\\\\ 说明v只有一个子树,那么类型数量就要翻倍
已经获取了Pv和Sv,如果Pv的第一个元素等于Sv的倒数第一个元素说明v只有一个子树,那么类型数量就要翻倍
代码
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
string pre, post;
cin >> pre >> post;
int i = 0, sum = 1;
while (i < pre.length() - 1)
{
int j = post.find(pre[i], 0);
if (pre[i + 1] == post[j - 1])
sum *= 2;
i++;
}
printf("%d\\n", sum);
return 0;
}
有错误望指正
以上是关于已知二叉树先序遍历和后序遍历序列,求可能的中序遍历序列及方案数的主要内容,如果未能解决你的问题,请参考以下文章
已知二叉树的先序序列和中序序列怎么求后序序列?不是基于C++的,要在TC环境下能运行的,各位能人帮帮忙吧
数据结构中已知前序序列和中序序列,怎么得出后序序列,谢谢回答!