输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int len=sequence.size();
if(len==0)
return false;
if(len==1)
return true;
int root=sequence[len-1]; //根结点
vector<int> leftTree;
vector<int> rightTree;
//在二叉搜索树中左子树的结点小于根结点
int i=0;
for(;i<len-1;i++){
if(sequence[i]>root)
break;
if(sequence[i]!=root)
leftTree.push_back(sequence[i]);
}
//在二叉搜索树中右子树的结点大于根结点
int j=i;
for(;j<len-1;j++){
if(sequence[j]<root)
return false;
if(sequence[j]!=root)
rightTree.push_back(sequence[j]);
}
bool left=true,right=true;
//判断左子树是不是二叉搜索树
if(leftTree.size()>0)
left=VerifySquenceOfBST(leftTree);
//判断右子树是不是二叉搜索树
if(rightTree.size()>0)
right=VerifySquenceOfBST(rightTree);
return left&&right;
}
};