數據結構複習(先序創建鏈表二叉樹)

已知一棵二叉樹的前序序列和中序序列分別
存於兩個一維數組中,試編寫算法建立該二叉樹的二
叉鏈表。

要求實現以下函數:
void BuildBiTree(BiTree &bt, int ps, char *pre,
                             int is, char *ino, int n);
/* 當前要建立的子樹bt的元素總數爲n,*/
/* 元素在前序序列pre的起始位置爲ps,*/
/* 元素在中序序列ino的起始位置爲is  */

二叉鏈表類型定義:
typedef char TElemType;
typedef struct BiTNode {
    TElemType data;
    BiTNode  *lchild, *rchild;
} BiTNode, *BiTree;

 

void BuildBiTree(BiTree &bt, int ps, char *pre,int is, char *ino, int n)
{
    int i,in1,count=0;
    if(n<1)
        return;   
   
    bt=(BiTree)malloc(sizeof(BiTNode));
    bt->data=pre[ps];
    bt->lchild=NULL;
    bt->rchild=NULL;
   
    //找出中序序列的中點
    for(i=is;ino[i]!=pre[ps];++i)
        ++count;
    in1=i;
   
    BuildBiTree(bt->lchild,ps+1,pre,is,ino,count);
    BuildBiTree(bt->rchild,ps+count+1,pre,in1+1,ino,n-1-count);
}

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章