问答题 设T是一棵满二叉树,写一个把T的后序遍历序列转换为先序遍历序列的递归算法。【中科院研究生院2003十(15分)】
【正确答案】正确答案:满二叉树的任一结点的左右子树均含有数量相等的结点,据此,可将任一遍历序列(前序、中序、后序)转为另一遍历序列。设post和pre分别是存放后序序列先序序列的向量,l1和h1以及l2和h2分别是post和pre初始和最后结点的下标。算法如下: void PostToPre(ElemType post[],pre[],int 11,h1,12,h2) //本算法将满二叉树的后序序列转为先序序列 {if(h1>=11) (pre[12]=post[h1]; //根结点 half=(hl一11)/2 ; //左或右子树的结点数 PostToPre(post,pre,11,ll+half一1,12+1,12+half) //转换左子树 PostToPre(post,pre,1l+half,h1—1,12+half+1,h2) //转换右子树 } }
【答案解析】