Description
二叉树的遍历是数据结构中的重要操作。
已知某个二叉树的先序和中序、或者中序和后序遍历的次序。可以唯一确定该二叉树。
Input
两行
第一行:先序遍历的序列
第二行:中序遍历的序列
Output
输出该二叉树后序遍历的序列。
Sample Input
ABCD
BADC
Sample Output
BDCA
#include <stdio.h>
#include <string.h>
int find(char c,char a[],int s,int e)
{
int i;
for(i=s;i<=e;i++)
{
if(a[i]==c)
return i;
}
}
void pronum(char pre[],int pre_s,int pre_e,char in[],int in_s,int in_e)
{
int k;
if(in_s>in_e)/*递归两个终结的地方*/
return;
if(in_s==in_e)
{
printf("%c",in[in_s]); //输出中序遍历的头结点
return;
}
k=find(pre[pre_s],in,in_s,in_e);
pronum(pre,pre_s+1,pre_s+(k-in_s),in,in_s,k-1);
pronum(pre,pre_s+k-in_s+1,pre_e,in,k+1,in_e);
printf("%c",pre[pre_s]); //最后输出前序的头,即中结点
}
int main()
{
char pre[100],in[100];
gets(pre);
gets(in);
pronum(pre,0,strlen(in)-1,in,0,strlen(pre)-1);//从0到长度减一都有字符即头尾包含
return 0;
}