劍指offer 第二十三題 二叉樹的後序遍歷序列

題目描述

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

思路:

         一個數組,如果是二叉搜索樹的後序序列,那麼根節點就是數組的最後一個

        那麼數組的前一部分,就是左子樹(要麼爲空,要麼全部小於根節點),後一部分全是右子樹(要麼爲空,要麼全部大於根節點)

        只有一種情況是非法的,如4,2,3就不可能是,從4開始就表示只能全是右子樹,但是2的出現破壞了這一規則

注意:

       二叉樹不能爲空

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length ==0)
            return false;
        return SqueenceBST(sequence,0,sequence.length-1);
    }
    private boolean SqueenceBST(int[] sq,int startI,int endI){
        if(endI -startI <2)
            return true;
        int jieduan =endI;
        for(int i=startI;i<endI;i++){
            if(sq[i] >sq[endI]){
                jieduan=i;
                break;
            }
        }
        //if(jieduan ==startI-1)
        for(int i=jieduan;i<endI;i++){
            if(sq[i] <=sq[endI])
                return false;
        }
        if(SqueenceBST(sq,startI,jieduan-1) == false)
            return false;
        if(SqueenceBST(sq,jieduan,endI-1) == false)
            return false;
        return true;
    }
}

 

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