二叉树的前序,中序,后序序列是根据根节点的访问顺序定义的。
即:
前序序列:根节点 -> 左子树 -> 右子树
中序序列:左子树 -> 根节点 -> 右子树
后序序列:左子树 -> 右子树 -> 根节点
给出中序序列和另外一个序列,就可以求出第三个序列。
例题:POJ - 2255-Tree Recovery(http://poj.org/problem?id=2255)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
void print_postOrder(int n, char *pre, char *in)
{
if(n <= 0) return;
int cnt, p = 0;
while(in[p] != pre[0]) p++;
print_postOrder(p, pre+1, in);//打印左子树
print_postOrder(n - p - 1, pre + p + 1, in + p + 1); //打印右子树
printf("%c", pre[0]); //打印根节点 ///根据需要输出的序列的不同,把这句话放在不同位置
}
int main(void)
{
char inOrder[105], preOrder[105];
while(scanf("%s", preOrder) != EOF)
{
scanf("%s", inOrder);
int n = strlen(preOrder);
print_postOrder(n, preOrder, inOrder);
printf("\n");
}
return 0;
}