二叉搜索数的后序遍历序列

题目描述

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

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence==null||sequence.length==0)
            return false;
        if(sequence.length == 1){
            return true;
        }
        boolean flag=isBST(sequence,0,sequence.length-1);
        return flag;
    }
/**     * 递归实现检测     *    
* 对于后序遍历来说,序列数组的最后一个元素一定是根节点,    
* 则根据这个元素,将前面的数组分为左、右两个部分,左侧部分都小,右侧部分都大,     
* 如果右侧部分有比该根节点小的元素,那么就不是后序遍历,如此递归进行     
* @param arr    
* @param start     
* @param end    
* @return     
*/
 public boolean isBST(int []arr, int start, int end) {        
     if (start >= end) {            
         return true;        
     }
     // 当前数组(从start到end部分)的根节点        
     int curElement = arr[end];        
     int splitIndex;        
     // 找到比curElement大和比curElement小的分界点,分成左侧、右侧两组数据        
     for(splitIndex = start; splitIndex < end && arr[splitIndex] < curElement;splitIndex ++);
           // 只需要看右侧即可,因为前面的for循环,已经确保左侧部分全部都小于curElement        
         for (int i = splitIndex; i < end; i++) {
             if (arr[i] < curElement) {
                 return false;            
             }       
         } 
     return isBST(arr, start, splitIndex - 1) && isBST(arr, splitIndex, end - 1);    
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值