天天看點

王道課後習題4.3.6:根據先序中序序列(一維數組)建構二叉樹

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

           

繼續閱讀