题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
class Solution
{
public:
bool VerifySquenceOfBST(vector<int> sequence)
{
return bst(sequence,0,sequence.size()-1);
}
bool bst(vector<int> sequence,int begin,int end)
{
if(sequence.empty()||begin>end) //队列为空,序列索引值begin、end错误
return false;
int root=sequence[end]; //序列中的最后一个节点是根节点
int i=begin; //序列中第一个节点
for(;i<end;++i) // 在二叉搜索树中,左子树节点小于根节点
if(sequence[i]>root)//i坐标为右子树第一个节点
break;
for(int j=i;j<end;++j) // 遍历右子节点
if(sequence[j]<root) //右子树中的节点值应该都比根节点值大,小的话退出
return false;
bool left=true;
if(i>begin) // 判断左子树是否为二叉树搜索树
left=bst(sequence,begin,i-1);
bool right=true;
if(i<end-1) //判断左子树是否为二叉树搜索树
right=bst(sequence,i,end-1);
return left&&right;
}
};