一、问题描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二、思路
二叉树题目用递归做是没有悬念的,本题亦是如此。首先递归函数的退出条件是start>=end,返回真;其次第一个循环找到左右子树的分界点i - 1,i - 1前是左子树,i- 1后是右子树;第二个循环中如果左子树的值比根节点大,那么返回假,最后递归返回左右子树的查找结果,同时为真才表明是二叉搜索树的后续遍历,如果有其中一个为假,则不是后续遍历。
三、代码
class Solution {
public:
bool verifyBST(vector<int> &array, int start ,int end){
if(start >= end) return true;
int i = end;
while(i > start && array[i - 1] > array[end])
--i;
for(int j = i - 1; j >= start; --j)
if(array[j] > array[end])
return false;
return verifyBST(array, start, i - 1) && (verifyBST(array, i, end - 1));
}
bool VerifySquenceOfBST(vector<int> sequence) {
if(!sequence.size()) return false;
return verifyBST(sequence, 0, sequence.size() - 1);
}
};