###思路
抓住二叉搜索树的特点,对于后序遍历序列,其每个子树的最后一个元素会比前面的左边一部分大,右边一部分小,这样便可以通过递归来判断
###AC代码
package com.zhumq.leetcode;
import java.util.Arrays;
import org.junit.Test;
public class IsBehSequenceBST {
public boolean isBechSequenceBST(int seq[],int len) {
//序列为空或者长度小于1直接返回false
if(seq == null || len<1) return false;
//后序遍历的最后节点为根节点
int root = seq[len-1];
//找到右子树第一个元素的下标(root>left)
int i;
for(i = 0;i<len-1;i++) {
if(seq[i]>root) {
break;
}
}
int rightStart = i;
//判断右子树中是否有元素小于根(root<right)
for(;i<len-1;i++) {
if(seq[i]<root) {
return false;
}
}
//递归判断左子树和右子树
boolean left = true;
boolean right = true;
//判断是否存在左子树
if(rightStart >0) {
left = isBechSequenceBST(seq, rightStart);
}
//判断是否存在右子树,len-1-rightStart是右子树的长度
if(rightStart<len-1-rightStart) {
right = isBechSequenceBST(seq, len-1-rightStart);
}
return right&&left;
}
@Test
public void test1() {
int arr[] = {5,7,6,9,11,10,8};
System.out.println(Arrays.toString(arr)+isBechSequenceBST(arr, arr.length));
}
}