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

題目描述

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

注意二叉搜索樹(二叉排序樹)和二叉樹的區別

二叉搜索樹:根節點的值大於其左子樹中任意一個節點的值,小於其右節點中任意一節點的值。二叉樹沒有此限制

package tree;

// 二叉搜索樹的後序遍歷序列
// 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。
// 如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
//後序遍歷,左->右->根
public class VerifySquenceOfBST_23 {
    public boolean VerifySquenceOfBST(int[] sequence) {
        if (sequence == null || sequence.length == 0) {
            return false;
        }
        return helpVerify(sequence, 0, sequence.length - 1);
    }

    public boolean helpVerify(int[] sequence, int start, int root) {
        if (start >= root) {
            return true;
        }
        int key = sequence[root];
        int i;
        //找到左右子樹分界點
        for (i = start; i < root; i++) {
            if (sequence[i] > key) {
                break;
            }
        }
        //在右子樹中判斷是否含有小於root的值,如果有返回false
        for (int j = i; j < root; j++) {
            if (sequence[j] < key)
                return false;
        }
        return helpVerify(sequence, start, i - 1) && helpVerify(sequence, i, root - 1);
    }

    public static void main(String[] args) {
        int [] sequence = {2,7,9,12,11,8};
        VerifySquenceOfBST_23 bst = new VerifySquenceOfBST_23();
        boolean bool = bst.VerifySquenceOfBST(sequence);
        System.out.println(bool);
    }
}

 

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