二叉树的重建
题目:
给定二叉树的先序和中序序列,输出该二叉树的后续序列
样例:
样例1:
输入:DBACEGF ABCDEFG
输出:ACBFGED
样例2:
输入:BCAD CBAD
输出:CDAB
代码:
#include<stdio.h>
#include<string.h>
using namespace std;
void build(int n,char* s1,char*s2)
{
if(n<=0)
{
return;
}
int p = strchr(s2,s1[0]) - s2; //找出根节点在中序遍历的位置
build(p,s1+1,s2); //递归构造左子树的后序遍历
build(n-p-1,s1+p+1,s2+p+1); //递归构造右子树的后序遍历
printf("%c",s1[0]); //输出根节点,
}
int main()
{
char s1[1000];
char s2[1000];
while(scanf("%s%s",s1,s2)==2)
{
int n = strlen(s1);
build(n,s1,s2);
printf("\n");
}
return 0;
}
参考:刘汝佳《算法竞赛入门经典(第二版)》