剑指offer:二叉搜索树后序遍历

题目描述:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路:

递归思想,对于一个二叉排序树,其左子树必小于根节点,右子树必大于根节点
后续遍历的话,最后一位是根节点
i从0-length,直到找出比根节点大的,即为左子树,j从这里到length,即为右子树
再遍历判断右子树是否有小于根节点的 有即返回false
再递归判断左右子树是否满足这个条件即可

 1 public class BSThouxu {
 2 
 3     public boolean VerifySquenceOfBST(int [] sequence) {
 4         if(sequence == null||sequence.length==0) return false;
 5         if(sequence.length == 1) return true;
 6         int len = sequence.length;
 7         int i=0;
 8         for( ; i < len-1;i++){
 9             if(sequence[i]>sequence[len-1]){
10                 break;
11             }
12         }
13         int j = i;
14         for(;j<len-1;j++){
15             if(sequence[j]<sequence[len-1]){
16                 return false;
17             }
18         }
19         boolean left = true;
20         boolean right = true;
21         if(i>0){
22             left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i));
23         }
24         if(i<len-1){
25             right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, i, len-1));
26         }
27         return (left&&right); 
28     }
29 
30     public static void main(String[] args) {
31         // TODO Auto-generated method stub
32 
33     }
34 
35 }

 

posted @ 2018-03-26 10:54  zlz099  阅读(162)  评论(0编辑  收藏  举报