题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
没给样例... 关键字:二叉搜索树,后序遍历。根在最后,前半边左子树都比根小,后半边右子树都比根大,以此递归判断
class Solution {
public:
bool verify(vector<int> s, int left, int right) {
if(left > right) return false;
//根
int root = s[right];
int i = left;
for(; i < right; i++)
{
if(s[i] > root) break;
}
int j = i;
for(; j < right; j++)
{
if(s[j] < root) return false;
}
bool l = true;
//存在并判断左子树
if(i > left + 1) l = verify(s, left, i - 1);
bool r = true;
//存在并判断右子树
if(i < right - 1) r = verify(s, i, right - 1);
return l && r;
}
bool VerifySquenceOfBST(vector<int> sequence) {
return verify(sequence, 0, sequence.size() - 1);
}
};