二叉搜索树的特点为:
1、左子树的值均比根节点的值小。
2、右子树的值均比根节点的值大。
后序遍历特点:最后一个元素为二叉树的根节点。
根据以上特性,通过与最后一个元素的比较,将序列的左右子树区分开来
例如:2、4、3、6、8、7、5 根节点为5
循环遍历,当遍历到6时,比5大,跳出循环,从0到3为左子树部分,从6到8为右子树部分。
继续递归遍历,若左右子树均遵循这个规则,则返回true。
例如:2,4,3,9,6,8,5 不符合此规则。
代码如下:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int len=sequence.size();
return IsOrNot(sequence,0,len-1);
}
bool IsOrNot(vector<int> seq,int begin,int end)
{
if(seq.empty())
return false;
int i=begin;
for(;i<end;i++)
{
if(seq[i]>seq[end])
break;
}
int j=i;
for(;j<end;j++)
{
if(seq[j]<seq[end])
return false;
}
bool left=true;
if(i>begin) //如果i不大于begin则表示左子树为空
{
left=IsOrNot(seq,begin,i-1);
}
bool right=true;
if(i<end-1) //如果i大于等于end-1,则表示右子树为空
{
right=IsOrNot(seq,i,end-1);
}
return left&&right;
}
};