劍指Offer_編程題_二叉搜索樹的後序遍歷序列

題目描述

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

補充:

  • 二叉查找樹(Binary Search Tree)又:二叉搜索樹,二叉排序樹,它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別爲二叉搜索樹。
  • 後序遍歷:左 -> 右 -> 根。

思路:由於以上性質,所以數組的最後一個數字即爲二叉排序樹根節點,跟據此節點將數組分爲兩部分,然後將這兩個部分遞歸判斷。

代碼:

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length == 0)return false;
        return Verify(sequence,0,sequence.length-1);
    }
    public boolean Verify(int[] sequence,int first,int last){
        if(first>=last)return true;
        int l = sequence[last];
        int index = first;
        while(sequence[index]<l){
            index++;
        }
        for(int i = index;i<last;i++){
            if(sequence[i]<l)return false;
        }
       return Verify(sequence,first,index-1) && Verify(sequence,index,last-1); 
    }
}

 

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