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

题目

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

总结

找出第一个大于根的节点,然后后面的节点都是小于根的,如此递归判断。

class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        int len = sequence.length;

        if (len == 0) {
            return false;
        }

        if (len == 1) {
            return true;
        }

        return verifySubOfBST(sequence, 0, len-1);

    }

    public boolean verifySubOfBST(int [] sequence, int start, int end) {
        // 注意此处是“>=”,否则会溢出
        if (start >= end) {
            return true;
        }

        int i;
        for (i = start; i < end; i++) {
            if (sequence[i] > sequence[end])
                break;
        }
        // i后面的应该比end要大
        for (int j = i; j < end; j++) {
            if (sequence[j] < sequence[end]) {
                return false;
            }
        }

        return verifySubOfBST(sequence, start, i-1) && verifySubOfBST(sequence, i, end-1);
    }
}
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值