//prel:先序遍历数组开始元素下标位置
//inl:中序遍历数组开始元素下标位置
//postl:后序遍历数组开始元素下标位置
void solve(int prel ,int inl ,int postl ,int n)
{
if(n == 0) //如果要判断的数组中元素个数为0 则退出
{
return ;
}
if(n == 1)
{
post[postl] = pre[prel]; //如果数组中只有一个元素,则将先序遍历中的第一个元素的值赋给后序遍历数组的最后一个元素
return ;
}
root = pre[prel]; //树的根
post[postl + n - 1] = root;
for(i = 0; i < n; i++)
{
if(in[inl + i] == root)
{
break;
}
}
l = i; //根左边有l个元素
r = n - l - 1; //根右边有r个元素
solve(prel + 1 ,inl ,postl , l); //左边进行递归运算
solve(prel + l + 1 ,inl + l + 1 ,postl + l , r); //右边进行递归运算
}