输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
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])
right.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;//当左右子树完全符合时才是二叉搜索树的后序遍历序列
}
};