题目描述,给你一个数组,判断它是不是一个搜索二叉树的后续遍历
思路:递归,后序遍历,则数组最后一个元素是搜索二叉树的根节点,且根节点的值比所有左子树的值大,比所有右子树的值小,因此,可以通过这个性质从右往左跟根节点判断,去寻找第一个比根节点值小的点,则那是左子树的根节点,然后还要判断左子树所有的值都要比根节点值小,否则就返回false,这样 去掉根节点,剩下的序列可以分为两个部分,分别是左子树和右子树,且它们又都是搜索二叉树,以此递归到start>=end时 返回true
java程序:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0)
return false;
return Judge(sequence,0, sequence.length-1);
}
public boolean Judge(int[] array,int start, int end){
if(start>=end)
return true;
int i = end;
while(i>start && array[i-1]>array[end])
i--;
for(int j=start;j<i;j++){
if(array[j]>array[end])
return false;
}
return Judge(array,start,i-1)&&Judge(array,i,end-1);
}
}