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

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;

}

猜你喜欢

转载自blog.csdn.net/zmc1248234377/article/details/79720958