设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1……n]和B[1……n]中,编写算法建立该二叉树的二叉链表
TNode* PreInCreate(char S1[],char S2[],int l1,int r1,int l2,int r2)
{
//初始时,l1=l2=1,r1=r2=n
int i,l_len,r_len;
TNode* root=(TNode*)malloc(sizeof(TNode));
root->data=S1[l1];
for(i=l2;S2[i]!=root->data;i++);
l_len=i-l2;
r_len=r2-i;
if(l_len)
root->lchild=PreInCreate(S1,S2,l1+1,l1+l_len,l2,l2+l_len-1);
else
root->lchild=NULL;
if(r_len)
root->rchild=PreInCreate(S1,S2,r1-r_len+1,r1,r2-r_len+1,r2);
else
root->rchild=NULL;
return root;
}
int main()
{
char s1[4]={'0','A','B','C'};
char s2[4]={'0','B','A','C'};
TNode* root=PreInCreate(s1,s2,1,3,1,3);
return 0;
}
转载:https://blog.csdn.net/qq_34941153/article/details/101795107
查看评论