题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
牛客传送门:点击打开链接
package offer;
public class Title24 {
public boolean VerifySquenceOfBST(int[] sequence) {
if(sequence == null || sequence.length == 0)
return false;
return VerifySquenceOfBST(sequence,0,sequence.length-1);
}
public boolean VerifySquenceOfBST(int[] sequence,int begin,int end){
// 后序遍历尾部为根节点,由于二叉搜索树的左子树及其子树比根节点小,所以能分离出左右子树
int index = begin;
while(index < end && sequence[index] < sequence[end]){
index++;
}
// 如果右子树有比根节点小的数字,则返回false
for(int i=index;i<end;i++){
if(sequence[i] < sequence[end])
return false;
}
boolean left = true,right = true;
if(index != begin){
left = VerifySquenceOfBST(sequence,begin,index-1);
}
if(index != end){
right = VerifySquenceOfBST(sequence,index,end-1);
}
return left && right;
}
public static void main(String[] args) {
int[] a = {5,7,6,9,11,10,8};
int[] b = {7,4,6,5};
System.out.println(new Title24().VerifySquenceOfBST(a));// true
System.out.println(new Title24().VerifySquenceOfBST(b));// false
}
}