问答题 设一棵二叉树中各结点的值互不相同,其前序序列和中序序列分别存于两个一维数组pre[L.n]和mid[L,n]中,试遍写算法建立该二叉树的二叉链表。【南京航空航天大学1999】
【正确答案】正确答案:算法的基本设计思想:采用递归算法,取前序序列第一个结点为根,递归建立左、右子树。算法的代码: void PreInCreat(BiTree root,ElemType pre[],ElemType mid[],int 1l,int hl,int 12,int h2){ //根据二叉树前序序列pre和中序序列mid建立二叉树 //11、h1、12、h2是序列第一和最后元素的下标 root=(BiTree)malloc(SiZeof(BiNode));//申请结点 root一>data=pre[11]; //pre[11]是根结点 for(i=12;i<=h2,i++) if(mid[i]==pre[11]) break; //在中序序列中,根结点将树分成左、右子树 if(i==12) root->lchild=NULL; //无左子树 else //递归建立左子树 PreInCreat(root一>lchiid,pre,mid,11+l,11+(i一12),12,i一1), if(i==h2) root一>rchild=NULL; //无右子树 else //递归建立右子树 PreInCreat(root一>rchild,pre,mid,11+(i一12)+1,h1,i+1,h2); }//PreInCreat
【答案解析】