输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
方法1:递归调用方式
class Solution {
public:
bool childjudge(vector<int>&a,int start,int end){
if(end<=start)
return true; //没有子树或者子树只剩一个结点
int i=start;
while(a[i]<a[end])
i++;
int j=i;
while(a[j]>a[end])
j++;
if(j!=end)
return false;
return childjudge(a,start,i-1)&&childjudge(a,i,end-1);
}
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty())
return false;
return childjudge(sequence,0,sequence.size()-1);
}
};
方法二:非递归实现 只能验证该序列是否符合不特定的某个二叉搜索树的后序遍历
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty())
return false;
int size = sequence.size();
int i = 0;
while(size--){ //不按照当前序列进行分析是否左子树右子树都符合要求 而是将右子树的根作为根进行多次分析
while(sequence[i]<sequence[size])
i++;
while(sequence[i]>sequence[size])
i++;
if(i<size)
return false;
i = 0;
}
return true;
}
};