設一棵二叉樹中各結點的值互不相同,其先序周遊序列和中序周遊序列分别存于兩個一維數組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;
}