leetcode中等剑指 Offer 33二叉搜索树的后序遍历序列

Posted qq_40707462

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等剑指 Offer 33二叉搜索树的后序遍历序列相关的知识,希望对你有一定的参考价值。


思路:
1、划分左右子树
遍历后序遍历的 [i, j] 区间元素,寻找 第一个大于根节点 的节点,索引记为 m 。此时,可划分出左子树区间 [i,m-1] 、右子树区间 [m, j - 1] 、根节点索引 j


2、递归判断左右是否满足:
左子树区间 [i, m - 1]内的所有节点都应 < postorder[j]。而之前划分左右子树,已经保证左子树区间的正确性,因此只需要判断右子树区间即可。

右子树区间 [m, j-1] 内的所有节点都应 >postorder[j] 。实现方式为遍历,当遇到 postorder[j]≤postorder[j] 的节点则跳出;则可通过 p = j 判断是否为二叉搜索树。

class Solution {
    public boolean verifyPostorder(int[] postorder) {
        return dfs(postorder,0,postorder.length-1);
    }
    public boolean dfs(int[]postorder,int i,int j){
        if(i>=j) return true;
        int temp=i;
        while(postorder[temp]<postorder[j]) temp++;
        int m=temp;//左右分界线
        while(postorder[temp]>postorder[j]) temp++;//看右是否满足条件
        
        return j==temp && dfs(postorder,i,m-1) && dfs(postorder,m,j-1);
    }
}

以上是关于leetcode中等剑指 Offer 33二叉搜索树的后序遍历序列的主要内容,如果未能解决你的问题,请参考以下文章

leetcode中等剑指 Offer 33二叉搜索树的后序遍历序列

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

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

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

leetcode刷题(134)——剑指 Offer 33. 二叉搜索树的后序遍历序列

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