1、数组a在函数中的传递:int *a
2、根结点为后序遍历的最后一个
3、在中序遍历中查找根结点
4、//对左子树来查找根结点 //对右子树来查找根结点
#include <bits/stdc++.h>
using namespace std;
/*
2 3 1 5 7 6 4 后序
1 2 3 4 5 6 7 中序
1、root=4
2、i=3
3、getpre(a,b,3)
4、getpre(a+3,b+3+1,7-3-1)
4、getpre(a+3,b+4,3)
a: 2 3 1 b: 1 2 3 3
a: 5 7 6 b: 5 6 7 3
*/
void getpre(int *a,int *b,int n) //其中数组a为后序,b为中序,n为每次遍历数目,用来求c这个先序
{
if(n>0)
{
int root = a[n-1]; //根结点为后序遍历的最后一个
int i;
for(i=0;i<n;i++) //在中序遍历中查找根结点
{
if(b[i] == root)
{
break;
}
}
cout << " " << root;
getpre(a, b, i); //对左子树来查找根结点
getpre(a+i, b+i+1, n-i-1); //对右子树来查找根结点
}
}
int main()
{
int n;
cin >> n;
int a[n],b[n],c[n]; //a[n]后序 b[n]中序
for(int i=0;i<n;i++)
{
cin >> a[i]; //输入后序
}
for(int i=0;i<n;i++)
{
cin >> b[i]; //输入中序
}
cout << "Preorder:";
getpre(a,b,n); //先序
return 0;
}