设有一棵满二叉树(所有结点值均不同),已知其先序序列为pre,设计一个算法求其后序序列post
对于一般二叉树,仅根据先序序列或后序序列,并不能确定另一个遍历序列,但对满二叉树,任意一个结点的左、右子树均含有相等的结点数,同时,先序序列的第一个结点作为后序序列的最后一个结点.递归实现,每一次递归的结果就是将先序序列的第一个结点放到后序序列的最后一个结点,直至这个二叉树的递归完成.
递归每棵树的左右子树,每一次递归完成都会将该子树的先序第一个结点放到后序的最后一个结点
void PreToPost(ElemType pre[],int low1,int high1,ElemType post[],int low2,int high2){
int half;
if(high1>=low1){
post[high2] = pre[low1];
half = (high1-low1)/2;
PreToPost(pre,low1+1,low1+half,post,low2,low2+half-1);//转换左子树
PreToPost(pre,low1+half+1,high1,post,low2+half,high2-1);//转换右子树
}
}