【剑指Offer】二叉搜索树的后序遍历序列

题目链接

题目描述

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


解题思路:

  • 后续遍历根节点总是在最后
  • 第一个大于根节点的即为右子数,再循环递归判断每一个节点是否符合二叉搜索树的性质
  • 对于非叶子节点,左子树小于根节点,右子树大于根节点

代码:

/**
 * @author: hyl
 * @date: 2019/08/15
 **/
public class Que23 {

    public boolean VerifySquenceOfBST(int [] sequence) {

        if (sequence == null || sequence.length == 0){
            return false;
        }

       

        return subtest(sequence , 0 , sequence.length);

    }

    private boolean subtest(int[] sequence, int start, int end) {

        if (start >= end){
            return true;
        }

        //找到左右子树的分界点,即右子数第一个节点
        int i = start;
        for (; i < end; i++) {
            if (sequence[i] > sequence[end - 1]){
                break;
            }
        }


        //在右子树中判断是否含有小于root的值,如果有返回false
        for (int j = i; j < end; j++) {
            if (sequence[j]  < sequence[end - 1]){
                return false;
            }
        }

        return subtest(sequence , start , i - 1) && subtest(sequence , i , end - 1);
    }
}



代码地址:
https://github.com/Han-YLun/jianzhiOffer/blob/master/Solution/src/Que23.java


文章为阿伦原创,如果文章有错的地方欢迎指正,大家互相交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值