牛客网刷题之二叉搜索树的后序遍历序列

来源:互联网 发布:深圳国际公益学院知乎 编辑:程序博客网 时间:2024/06/06 08:34

题目描述:

这里写图片描述

解题思路:

二叉搜索树又称排序树,查找树。特点是:如果树不为空,那么,左子树总是小于根节点,而右子树总是大于根节点。
因为是后序遍历,所以,根节点就是数组中最后一位。那么对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)总是小于x,后一段(右子树)总是大于x,且这两段(子树)都是合法的后序序列。显然,我们可以使用递归法。
分别使用两个指针指向T的首位和末位,可以从末位开始查找,先找到比根节点小的坐标index,那么index前边(包括index)就是左子树,而后边就是右子树,如果出现左子树元素大于根节点的话,就返回false,循环此过程,当两个指针相遇时,证明遍历完成,否则返回false。

题解:

public boolean VerifySquenceOfBST(int[] sequence) {        if (sequence.length == 0) {            return false;        }        return isBst(sequence, 0, sequence.length - 1);    }    public boolean isBst(int[] arr, int start, int root) {        if (start >= root)            return true;        int index = root;        // 找到比根小的坐标        while (index > start && arr[index - 1] > arr[root]) {            index--;        }        for (int i = index -1 ; i >= start; i--) {            if (arr[i] > arr[root]) {                return false;            }        }        return isBst(arr, start, index - 1) && isBst(arr, index, root - 1);    }

ac结果:

这里写图片描述

0 1
原创粉丝点击