C语言数据结构代码练习day23
设一棵二叉树中各结点值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1…n]和B[1…n]中,试编写算法建立该二叉树的二叉链表
Bitree PreInCreat(ElemType A[],ElemType B[],int l1,int h1,int l2,int h2){
/*l1,h1,l2,h2为先序遍历第一个结点坐标、最后一个结点坐标和中序第一个结点坐标,最后一个节点坐标*/
/*l1,l2首次调用时均为1,h1,h2首次调用时均为n*/
root=(Bitree)malloc(sizeof(BitNode));
root->data=A[1]; //先序遍历序列第一项为根节点
for(i=l2;B[i]!=root->data;i++); //在中序遍历序列根据根节点位置划分左右子树
llen=i-l2; //左子树长度
rlen=h2-i; //右子树长度
if(llen) //左子树不为空时,对左子树序列继续划分
root->lchild=PreInCreat(A,B,l1+1,l1+llen,l2,l2+llen-1);
else //左子树为空
root->lchild=NULL;
if(rlen) //右子树不为空时,对右子树序列继续划分
root->rchild=PreInCreat(A,B,h1-rlen+1,h1,h2-rlen+1,h2);
else //右子树为空
root->rchild=NULL;
return root; //返回根节点指针
}