劍指Offer學習-面試題33:二叉搜索樹的後序遍歷序列

	/**
     * 二叉搜索樹的後序遍歷序列
     *
     * @return
     */
    public boolean verifySquenceOfBST(int[] arr) {
        if (null == arr || arr.length < 2) return true;
        return is(0, arr.length - 1, arr);
    }

    private static boolean is(int left, int right, int[] arr) {
        if (left >= right) return true;
        int r = arr[right];
        int index = left;
        //從右到左找到小於最右的值,記錄索引
        for (int i = right - 1; i > left; i--) {
            if (arr[i] < r) {
                index = i;
                break;
            }
        }
        //判斷右邊是否是二叉搜索樹
        boolean b = is(index + 1, right - 1, arr);
        if (b) {
            //如果左邊有大於最右邊的值,直接返回false
            for (int i = left; i < index; i++) {
                if (r < arr[left]) return false;
            }
            //判斷左邊是否是二叉搜索樹
            return is(left, index, arr);
        }
        return false;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章