1.和课本思路保持一致,先找到了根节点 因为是二叉搜索树 所以比根节点值小的是左子树,比根节点大的是右子树 判断完一轮后 将左子树放进去再进行判断! 右子树进行判断 ;当然考虑什么时候有左右子树;
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty())
return false;
int length=sequence.size();
int root=sequence.at(length-1);//最后一个
int i=0;
vector<int> left;
vector<int> right;
//找出左子树 值都小于根节点的值
for(i=0;i<length-1;i++)
{
if(sequence[i]>root)
break; //退出循环 得知i
left.push_back(sequence[i]);
}
//找出右子树 值都大于根节点的值
for(int j=i;j<length-1;j++)
{
if(sequence[j]<root) //后面有比根节点小的 直接报错
return false;
right.push_back(sequence[j]);
}
bool leftflag=true; //如果没有 就是成功
bool rightflag=true;
//判断左子树 满足要求吗
if (i>0)//如果存在左子树
{ leftflag=VerifySquenceOfBST(left);}
if (i<length-1)//如果存在右子树 j增加过
{ rightflag=VerifySquenceOfBST(right);}
return leftflag&&rightflag;
}
};