剑指offer_二叉搜索树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相 同。 例如,下图是后序遍历序列 1,3,2 所对应的二叉搜索树。

1 public class Solution { 2 public boolean VerifySquenceOfBST(int [] sequence) { 3 if(sequence==null||sequence.length==0) return false; 4 return verify(sequence,0,sequence.length-1); 5 } 6 public boolean verify(int [] sequence,int first,int last){ 7 if(last-first<=1) return true; 8 int mid = first; 9 int root = sequence[last]; 10 for(int i=first;i<last;i++){ 11 if(sequence[i] <= root) 12 mid++; 13 } 14 for(int i=mid;i<last;i++){ 15 if(sequence[i] <= root) 16 return false; 17 } 18 return verify(sequence,first,mid-1)&&verify(sequence,mid,last-1); 19 20 } 21 }
二分法判断
先找出分割处,判断分割处后如果有小于root的则不是二叉搜索树
然后递归分割处左边和右边
递归终止条件是序列只剩一个节点或两个节点时返回true
后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。

浙公网安备 33010602011771号