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

思路:后序遍历则数组末尾为根节点。

二叉搜索树左子节点值 < 根节点值  <右子节点值

因子划分左右子树,递归判断。

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

class Solution {
    public boolean verifyPostorder(int[] postorder) {
        return recur(postorder, 0, postorder.length - 1);
    }

    boolean recur(int[] postorder, int i, int j){
        //当 i≥j,说明此子树节点数量≤1,无需判别正确性,因此直接返回true
        if(i >= j) return true;
        int p = i;
        //找到第一个大于根节点的节点,划分左右子树
        while(postorder[p] < postorder[j]) p++;
        int m = p;
        //和下面的p == j 一起判断是否符合后续遍历
        while(postorder[p] > postorder[j]) p++;
        //如果 p != j 了后面就直接短路了
        return p == j && recur(postorder, i, m - 1) && recur(postorder, m, j - 1);
    }
}

 

posted @ 2021-04-01 15:55  星予  阅读(30)  评论(0编辑  收藏  举报