由中序序列和先序序列確定一顆二叉樹

blabla發表於2019-11-18

遞迴建立二叉樹

preSq為前序序列;inSq為中序序列;l1、h1分別為前序序列的第一個結點值和最後一個結點值;l2、h2分別為中序序列的第一個結點值和最後一個結點值

BinaryTree create(int preSq[], int inSq[], int l1, int h1, int l2, int h2){
    auto root = new TreeNode;
    root->data = preSq[l1];
    int i = l2, lLen, rLen;
    for(;inSq[i] != root->data; i++); //查詢根結點
    lLen = i - l2;
    rLen = h2 - i;
    if(lLen){//遞迴遍歷左子樹
        p->lChild = create(preSq, inSq, l1 + 1, lLen + l1, l2, lLen + l2 - 1);
    }
    if(rLen){
            p->rChild = create(preSq, inSq, h1 - rLen + 1, h1, h2 - rlen + 1, h2);
    }
    return root;
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章