题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
class Solution {
public:bool VerifySquenceOfBST(vector<int> sequence) {
// 首先你得知道什么是二叉搜索树
//2017 -0-6-24 周六
//若有左子树,则左子树所有的点都小于根节点
//若右子树,则右子树所有点都大于根节点。
////构建二叉搜索树。
//思路:最后一个是根结点
if (sequence.size()==0) return false;
//不为空怎么处理呢
//length
int len=sequence.size();
vector<int> Vmin;
vector<int> Vmax;
bool res=false;
//
int root=sequence[len-1];
int i,j;
//搜索左边吗?len-1
for(i=0;i<len-1;i++)
{ //找到root位置
if(root<sequence[i])
break;
Vmin.push_back(sequence[i]);
}
//保存中间位置
// int mid=i
//搜索右边len-1
for( j=i;j<len-1;j++)
{
if(root>sequence[j])
return false;
Vmax.push_back(sequence[j]);
}
if(j==len-1) res=true;
//符合,处理左子树,没有给大小
if(Vmin.size()&&res==true)
{
res=VerifySquenceOfBST(Vmin);
}
if(Vmax.size()&&res==true)
{
res=VerifySquenceOfBST(Vmax);
}
return res;
}
};