劍指——二叉搜索樹的後序遍歷

二叉搜索樹的後序遍歷

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


解題思路數組

給出的數組是後序遍歷,那麼最後一個元素對應着樹的根節點。code

數組前部分對應左子樹,其中元素都小於根節點;後部分對應右子樹,其中元素都大於根節點。遞歸

再分別對左右子樹進行遞歸地判斷。io


public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        //在Java中,數組指向unll和數組爲空是不同的概念,要將這兩種特殊狀況都排除
        if(sequence == null || sequence.length == 0)
            return false;
        //
        return helpVerify(sequence, 0, sequence.length - 1);
    }
    /**
    *helpVerify方法用於判斷當前這個數組是否知足二叉搜索樹的後序遍歷數組
    *seq:當前被判斷的數組
    *start:當前數組的第一個元素的下標
    *end:當前數組的最後一個元素的下標
    **/
    public boolean helpVerify(int[] seq, int start, int end){
        if(start >= end)
            return true;
        int root = seq[end];
        int i;
        //找到左右子樹的分割處
        for(i = start; i < end - 1; i ++){
            if(seq[i] > root)
                break;
        }
        //判斷分割處以後的數字是否都大於根節點的值,若不是則返回false
        for(int j = i; j < end - 1; j ++){
            if(seq[j] < root)
                return false;
        }
        //遞歸地判斷左右子樹
        return helpVerify(seq, start, i) && helpVerify(seq, i, end - 1);
    }
}
相關文章
相關標籤/搜索