二叉搜索樹的後序遍歷序列

題目描述

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

思路:

BST的後序序列的合法序列是,對於一個序列S,最後一個元素是x (也就是根),如果去掉最後一個元素的序列爲T,那麼T滿足:T可以分成兩段,前一段(左子樹)小於x,後一段(右子樹)大於x,且這兩段(子樹)都是合法的後序序列。完美的遞歸定義 : ) 。

public boolean VerifySquenceOfBST(int [] sequence) {
    if(sequence.length == 0) return false;
    return IsTreeBST(sequence, 0, sequence.length-1);
}
public boolean IsTreeBST(int [] sequence,int start,int end ){
    if(end <= start) return true;
    int i = start;
    for (; i < end; i++) {
        if(sequence[i] > sequence[end]) break;
    }
    for (int j = i; j < end; j++) {
        if(sequence[j] < sequence[end]) return false;
    }
    return IsTreeBST(sequence, start, i-1) && IsTreeBST(sequence, i, end-1);
}
發佈了147 篇原創文章 · 獲贊 32 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章