二叉搜索树的左子树节点小于根节点小于右子节点
二叉搜索树的后序遍历序列中根节点一定在数组的最后一个位置
可以把序列分为两部分,分别代表根节点左子树和右子树,然后对新形成的序列继续递归判断可得到结果
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int len=sequence.size();//计算序列长度
if(len==0)return false;
int i=0;
vector<int>left,right;
//因为后序遍历,所以序列的最后一个元素为根节点元素,如果是二叉搜索树那么所有小于最后一个元素的在左子树
for(;i<len-1;i++)//将所有小于最后一个节点的值放在left向量中
{
if(sequence[i]<sequence[len-1])
left.push_back(sequence[i]);
else
break;
}
for(;i<len-1;i++)//将所有小于最后一个节点的值放在left向量中
{
if(sequence[i]>sequence[len-1])
left.push_back(sequence[i]);
else
return false;//如果剩下的元素有比最后一个节点小的那么肯定不是二叉搜索树的后序遍历序列
}
//对划分的左右子树序列进行相同的递归
bool left1=true,right1=true;
if(!left.empty())
left1=VerifySquenceOfBST(left);//递归判断左子树
if(!right.empty())
right1=VerifySquenceOfBST(right);//递归判断右子树
return left1&&right1;//当左右子树完全符合时才是二叉搜索树的后序遍历序列
}
};