//输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 
//
// 
//
// 参考以下这颗二叉搜索树: 
//
//      5
//    / \
//   2   6
//  / \
// 1   3 
//
// 示例 1: 
//
// 输入: [1,6,3,2,5]
//输出: false 
//
// 示例 2: 
//
// 输入: [1,3,2,6,5]
//输出: true 
//
// 
//
// 提示: 
//
// 
// 数组长度 <= 1000 
// 
// 👍 193 👎 0

/*
* 剑指 Offer 33 二叉搜索树的后序遍历序列
* 2021-02-18 11:38:09
* @author oxygenbytes
*/ 
#include "leetcode.h" 
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    bool verifyPostorder(vector<int>& postorder) {
        int n = postorder.size();
        return verify(postorder, 0, n - 1);
    }
    bool verify(vector<int>& postorder, int left, int right){
        if(left > right) return true;

        int i;
        for(i = left;i < right;i++){
            if(postorder[i] > postorder[right]) break;
        }
        int pivot = i;

        for(;i < right;i++){
            if(postorder[i] < postorder[right]){
                return false;
            }
        }
        return verify(postorder, left, pivot - 1) && verify(postorder, pivot, right - 1);
    }
};
//leetcode submit region end(Prohibit modification and deletion)