1132: 第八章:我们终究差了一厘米
Time Limit: 1 Sec Memory Limit: 128 MB
Description
几年后,林静和陈孝正都出现在郑微面前,而工作后的郑微也纠葛在工作、感情甚至阴谋之中。
面对林静和陈孝正,郑薇该如何选择。。。
选择总是那么困难,每一个结点都有两种选择,这个不是“二叉树”吗?现在有一个二叉树,我们已知它的先序遍历的结果和中序遍历的结果。请你给出它的后序遍历结果。
Input
输入有多组数据,每组的第一行是一个n,表示这棵二叉树有n个结点
然后是两行,第一行是先序遍历的结果,第二行是中序遍历的结果。
Output
给出n个结点的后序遍历结果
Sample Input
9
1 2 4 7 3 5 8 9 6
4 7 2 1 8 5 9 3 6
Sample Output
7 4 2 8 9 5 6 3 1
代码~:
#include <stdio.h>
int a[10005],b[10005],root;
void Find(int start_b,int end_b)
{
if(start_b < end_b)
{
int k = root,i;//k记录在先序遍历中取的root位置
for(i = start_b; i <= end_b; i++)
if(a[root] == b[i]) break;
root++;
Find(start_b,i-1);//左子树
Find(i+1,end_b);//右子树
printf("%d",a[k]);//递归返回打印之前有分支的节点
if(k != 0)
printf(" ");
}
if(start_b == end_b)//当没有分支了
{
printf("%d",a[root]);
if(root != 0)
printf(" ");
root++;
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
for(int j = 0; j < n; j++)
{
scanf("%d",&b[j]);
}
root = 0;
Find(0,n-1);
printf("\n");
}
return 0;
}