小言_互联网的博客

王道课后习题4.3.6:根据先序中序序列(一维数组)构建二叉树

376人阅读  评论(0)
设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场