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

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

对于一个二叉搜索树的后序遍历,比如数组[1, 2, 5, 4]即为一个二叉搜索树的后序遍历,我们可以发现该数组由3部分组成,1,2和5和4,前面的1,2部分小于,5这部分大于4,由此可知,我只需要对数组进行3部分的判断即可,但是注意,二叉搜索树可能没有左子树,因此可能没有小于的那部分。

 public void convert(TreeNode root) {
        if (root == null) return;
        Convert(root.left);
        root.left = pre;
        if (pre == null) res = root;
        if (pre != null) pre.right = root;
        pre = root;
        Convert(root.right);
    }

    public boolean VerifySquenceOfBST(int[] sequence,int lo, int hi) {
        if (lo >= hi) return true;
        int i = lo;
        for (; i < hi; i++) {
            if (sequence[i] > sequence[hi]) break;
        }
        for (int j = i; j < hi; j++) {
            if (sequence[j] < sequence[hi]) return false;
        }
        return VerifySquenceOfBST(sequence, lo, i - 1) && VerifySquenceOfBST(sequence, lo, hi - 1);
    }

你可能感兴趣的:(二叉搜索树的后序遍历序列)