题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
分析:在后序遍历中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两个部分,第一个部分是左子树节点的值,他们都比根节点的值小;第二个部分是右子树节点的值,他们都比根节点的值大。因此从头遍历整个数组,当遇到一个大于根节点的数时,将前面的都划为左子树,继续遍历,如果后面有一个小于根节点的值,则不是后序遍历数组;如果后面的所有数都小于根节点的值,则继续递归遍历下去,代码如下(是根据在牛客网上给的函数原型写的):
1 bool VerifySquenceOfBST(vector sequence) { 2 if(sequence.size()<=0) 3 return false; 4 return Judge(sequence,0,sequence.size()-1); 5 } 6 7 bool Judge(vector sequence,int l,int r){ 8 int i=l,j; 9 for(;isequence[r])11 break;12 }13 for(j=i;j 0)20 leftJudge = Judge(sequence,0,i-2);21 if(i