题目描述
给出一棵二叉树的先序和中序数组,通过这两个数组直接生成正确的后序数组。
输入描述:
第一行一个整数 n,表示二叉树的大小。
第二行 n 个整数 a_i,表示二叉树的先序遍历数组。
第三行 n 个整数 b_i,表示二叉树的中序遍历数组。
输出描述:
输出一行 n 个整数表示二叉树的后序遍历数组。
示例1
输入
复制
3
1 2 3
2 1 3
输出
复制
2 3 1
#include<iostream>
using namespace std;
int pre[10007],in[10007];//前序和中序数组
void getTreeLRN( int a[],int fa,int la, int b[],int fb,int lb )
{
if(fa==la)
{
cout<<a[fa]<<" ";
return;
}
if( fa>la )
return ;
int k=fb;
while(b[k]!=a[fa] )//寻找根节点
k++;
int s=fa;
while(a[s]!=b[k-1])//寻找右节点
s++;
getTreeLRN( a,fa+1,k-fb+fa , b,fb , k-1);
getTreeLRN( a,k-fb+fa+1 ,la, b,k+1,lb);
cout<<a[fa]<<" ";
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&pre[i]);
for(int i=0;i<n;i++)
scanf("%d",&in[i]);
getTreeLRN(pre,0,n-1,in,0,n-1);
return 0;
}