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

        在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树结点的值,它们都比根结点的值小;第二部分是右子树结点的值,它们都比根结点的值大。

代码实现:

public class Solution{
       public static boolean VerifySequenceOfBST(int[] numbers,int start,int end){
              if(numbers==null||numbers.length==0){
                    return false;
              }
              if(start==end){
                    return true;
              }
              int root=numbers[end];
             //在二叉搜索树中左子树的结点小于根结点
              int i=start;
              for(;i<end;i++){
                    if(numbers[i]>root){
                         break;
                    }
              }
             //在二叉搜索树中右子树的结点大于根结点
              for(int j=i;j<end;j++){
                    if(numbers[j]<root){
                         return false;
                    }
              }
              //判断左子树是不是二叉搜索树
              boolean left=true;
              if(i>start){
                    left=VerifySequenceOfBST(numbers,start,i-1);
              }
              //判断右子树是不是二叉搜索树
              boolean right=true;
              if(i<end){
                    right=VerifySequenceOfBST(numbers,i,end-1);
              }
              return left&&right;
       }

       public static void main(String[] args){
              int[] arr={5,7,6,9,11,10,8};
              boolean result=VerifySequenceOfBST(arr,0,arr.length-1);
              System.out.println(result);
       }
}

 

 posted on 2018-10-29 20:44  会飞的金鱼  阅读(129)  评论(0)    收藏  举报