判斷序列是否是二叉搜尋樹的後續遍歷

LJ2016發表於2019-09-02

判斷是否要從二叉樹的定義著手:

  1. 根節點大於所有左子樹上的節點,小於右子樹所有節點;
  2. 子樹遞迴滿足此條件

注:既然是搜尋樹,那麼認為無重複節點(無相同關鍵字)

function test(a, l, r)
{
    if(l == r) return true;
    let root = a[r];
    let i = l;
    while(a[i] < root) i++;
    let mid = i;
    while(i < r){
        if(a[i] < root) return false;
        i++;
    }

    let flag = true;
    if(mid > l){
        flag = flag && test(a, l, mid - 1);
    }
    if(mid <= r){
        flag = flag && test(a, mid, r - 1);
    }

    return flag;
}

// let a = [5, 7, 6, 9, 11, 10, 8];
let a = [7, 4, 6, 5];
let valid_post_order_tree = test(a, 0, a.length - 1);
console.log(valid_post_order_tree);
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章