题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路:后序遍历是左右根的顺序,根值一定大于所有的左值,小于所有的右值,那么采取自上而下的做法,递归判断子树是否符合后序遍历。

class Solution {
public:
bool verify(vector<int>& v,int begin,int end)
{
if(v.empty()||begin>end) return false;
int root = v[end];
int i = begin;
while(v[i++]<root);
int index = i-1;//右子树第一个结点
while(v[i++]>root);
if(i<end) return false;//右子树中含有小于根值的结点
bool left = true;
bool right = true;
if(index>begin)//左子树结点数大于1,递归判断
left = verify(v,begin,index-1);
if(index<end-1)//右子树结点数大于1,递归判断
right = verify(v,index,end-1);
return left&&right;
}
bool VerifySquenceOfBST(vector<int> sequence) {
return verify(sequence,0,sequence.size()-1);
}
};