您的位置:首页 > 其它

利用递归方法已知先序,中序求后序

2018-03-27 23:03 267 查看
Description二叉树的遍历是数据结构中的重要操作。 
已知某个二叉树的先序和中序、或者中序和后序遍历的次序。可以唯一确定该二叉树。Input两行 
第一行:先序遍历的序列 
第二行:中序遍历的序列Output输出该二叉树后序遍历的序列。Sample InputABCD
BADCSample OutputBDCA
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: