剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)

二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大。

例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素。

思路:由于是后序遍历,所以数组的最后一个节点是根节点,而且,由于是二叉收索树,所以,前面的数据被分为两部分,右边部分比根节点小,左边比根节点大。左右两边又分别为二叉收索树,因此可以用递归来实现。

Java代码:

public class IsBinarySearchTree {

     public boolean isBST(int[] sequence,int start,int len){
         if(sequence==null||len<=0)
             return false;
         
         int root=sequence[len-1];
         //二叉搜索树的左边都小于根节点,右边都大于根节点。
         int i=0;
         while(i<len-1){
             if(sequence[i]>root)
                 break;
             i++;
         }
         int j=i;
         while(j<len-1){
             if(sequence[j]<root)
                 return false;
             j++;
         }
         //判断左子树是不是二叉搜索树
         boolean left=true;
         if(i>0)
            left=isBST(sequence,0,i);
         //判断右子树是不是二叉搜索树
         boolean right=true;
         if(i<len-1)
             right=isBST(sequence,i,len-i-1);
         return left&&right;
         
   }
     public static void main(String[] args) {
         int[] a={3,5,6};
        IsBinarySearchTree ibt=new IsBinarySearchTree();
        if(ibt.isBST(a, 0, a.length)){
           System.out.println("is BinarySearchTree endRoot");
        }
        else
            System.out.println("is not BinarySearchTree endRoot");
    }
}

 

posted @ 2015-08-18 11:21  lisahappy  阅读(702)  评论(0编辑  收藏  举报