方法思想:除去当前序列的第一个元素e,将剩下的分成前后相等的两半,分别为当前元素e的左右子树。将e移到整个序列的末尾,再递归处理子树即可。
#include <bits/stdc++.h>
#define MaxSize 100
/*
* Created by HarvestWu on 2018/07/18.
*/
using namespace std;
typedef char ElemType;
//满二叉树先序序列数组获得后续序列
void change(ElemType pre[],int L1,int R1,ElemType post[],int L2,int R2)
{
if(L1<=R1)
{
post[R2]=pre[L1];//将pre的第一个元素放到post最后
change(pre,L1+1,(L1+R1+1)/2,post,L2,(L2+R2-1)/2); //递归处理前半部分
change(pre,(L1+R1+1)/2+1,R1,post,(L2+R1-1)/2+1,R2-1); //递归处理后半部分
}
}
int main()
{
ElemType pre[]={'A','B','D','E','C','F','G'};
ElemType post[7];
change(pre,0,6,post,0,6);
for(int i=0;i<7;++i)
cout<<post[i]<<' ';
return 0;
}