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

1,問題的描述

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

2,解題思路

二叉樹後序遍歷序列的最後一個值是根節點的值,二叉搜索樹後序遍歷序列的合法性條件是:先根據根節點的值將後序遍歷序列分爲左右兩個序列,左邊序列所有元素應該都小於根節點的值,右邊序列所有元素應該都大於根節點的值。左右兩個序列同樣應該是二叉搜索樹的合法後序遍歷序列,那麼就用遞歸的方法去判斷就行了。注:一定要注意遞歸的出口,在源碼中有註釋。

3,源碼

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0) return false;//正常情況下空樹是二叉搜索樹,但是此題認定空樹不是二叉搜索樹
        return judge(sequence,0,sequence.length-1);
    }

    public boolean judge(int[] sequence, int l, int r) {
        if(l>=r) return true;//l>r表示空樹,l==r表示葉子節點
        int i=r;
        while(i>l && sequence[i-1]>sequence[r]) i--;//i的最終值是右序列的起始位置
        //for循環判斷左序列是否包含大於根節點值的節點,若有,說明不滿足二叉查找樹的合法性。
        for(int j=l;j<i-1;j++) {
            if(sequence[j]>sequence[r]) return false;
        }
        return judge(sequence,l,i-1)&&judge(sequence,i,r-1);
    }

}

 

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