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; }