输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
后序遍历,则可与确定序列的最后一个树即为根节点的值,对于二叉搜索树,左子树上的值都小于根结点的值,右子树上的值都大于根节点的值,所以可以判定序列是否可以分为前后两段(左子树和右子树),并且这两段序列也是合法的后序序列,采用递归,代码如下:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size()==0){
return false;
}
return VerifySquenceOfBSTHelp(sequence,0,sequence.size()-1);
}
bool VerifySquenceOfBSTHelp(vector<int> sequence,int begin,int end) {
if(begin>end){
return true;
}
int num=sequence[end];
int i;
int idx;
for(idx=begin;idx<=end-1 && sequence[idx]<num;idx++);
for(i=idx;i<=end-1 && sequence[i]>num;i++);
return (i==end) && VerifySquenceOfBSTHelp(sequence,begin,idx-1) && VerifySquenceOfBSTHelp(sequence,idx,end-1);
}
};