一个数组是否为二叉搜索树的后序遍历

题目描述

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

分析

二叉搜索树:对二叉搜索树任意节点而言,左子树的值都小于该节点的值,右子树的值都大于该节点的值。
二叉树的遍历:
先序遍历:“先”代表先遍历根节点。节点遍历顺序为:根节点,左孩子,右孩子,简称“根左右”,或者“中左右”
中序遍历:“中“代表根节点在中间遍历。节点遍历顺序为:左孩子,根节点,右孩子,简称”左根右“,或者”左中右“
后序遍历:”后“代表根节点在最后遍历。节点遍历顺序为:左孩子,右孩子,根节点,简称”左右根“,或者”左右中“
涉及到树的算法题一般都用递归
根据上述概念可知,如果一个数组是二叉搜索树的后序遍历,那么数组的最后一位是二叉搜索树的根节点,数组中除最后一位外的剩余部分中前一部分比根节点小,后一部分比根节点大。前一部分和后一部分又都是二叉搜索树。所以可以用递归的方式判断一个数组是否为二叉搜索树的后序遍历。

代码实现(Java)

public boolean VerifySquenceOfBST(int[] sequence) {
        if (sequence == null || sequence.length == 0) return false;
        return isBST(sequence, 0, sequence.length - 1);
    }

    private boolean isBST(int[] sequence, int start, int end) {
        if (start >= end) return true;
        int i = start;
        for (; i < end; i++) if (sequence[i] > sequence[end]) break;
        for (int j = i; j < end; j++) if (sequence[j] < sequence[end]) return false;
        return isBST(sequence, start, i - 1) && isBST(sequence, i, end - 1);
    }

注:题目及解法均来源于牛客网–剑指offer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值