其他分享
首页 > 其他分享> > 剑指 Offer 33. 二叉搜索树的后序遍历序列

剑指 Offer 33. 二叉搜索树的后序遍历序列

作者:互联网

题目

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

参考以下这颗二叉搜索树:

 5
/ \

2 6
/
1 3

示例

输入: [1,6,3,2,5]
输出: false

输入: [1,3,2,6,5]
输出: true

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1:递归

Java实现
class Solution {
    public boolean verifyPostorder(int[] postorder) {
        int n = postorder.length;
        return pd(postorder, 0, n - 1);
    }

    public boolean pd(int[] postorder, int start, int end){
        //等于:只有一个节点,不用判断
        //大于:没有节点
        if (start >= end) return true;

        //根的值
        int root = postorder[end];

        //左子树,都小于root的值
        int mid = start;
        while (postorder[mid] < root) mid++;

        //此时mid为右子树的第一个值

        //如果右子树存在小于root的值返回false
        int tmp = mid;
        while (tmp < end) {
            if (postorder[tmp] < root) return false;
            tmp++;
        }

        //递归左子树、右子树检查
        return pd(postorder, start, mid - 1) && pd(postorder, mid, end - 1);
    }
}

在这里插入图片描述

标签:end,Offer,33,mid,二叉,int,return,root,postorder
来源: https://blog.csdn.net/qq_42467009/article/details/121722835