栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

1.题目  2.思路

读题读了好几遍,才看明白用例1为什么是false,一开始是没有注意到二叉搜索树的条件。

后面发现理解错了二叉搜索树的意思。因为一开始以为只要满足这个节点的左边节点的值 < 当前节点的值 < 右边节点的值 就叫二叉搜索树。

后来把用例构造树的时候,发现用这个理论解释不了为什么是false.

后来百度了一下,发现定义弄错了.....

正解:二叉搜索树:左子树的所有节点的值< 当前节点的值 < 右子树所有节点的值!!!注意是左右子树的所有节点,而不是一个节点满足就行。

后续遍历: 左- 右 - 根

在这个理论的思考后,觉得应该把最后的节点作为根节点,找到最后一个比这个根节点小的位置start,以及刚好比这个根节点大于的位置 - 1 - >end,比较这两个位置是否相等,相等则继续递归,不相等,直接返回false.

class Solution {
    public boolean verifyPostorder(int[] postorder) {
        //二叉搜索树:左子树的所有节点值 < 根节点 < 右子树所有节点的值
        int n = postorder.length;
        if(n == 0) return true;
        return dfs(0, n - 1, postorder);
    }

    public  boolean dfs(int start, int end, int[]postorder){
        int root = postorder[end];
        int low = start, high = end;
        // System.out.println(start +">>>1 "+end);
        while(start != end){
            while(start != end && postorder[end] >= root)
                end--;
            while(start != end && postorder[start] < root)
                start++;
            // System.out.println(start +">>>2 "+end);
            if(start == end) break;
            else return false;
        }
        if(start == end){
            boolean res = true;
            if(low < start)
                res= dfs(low, start, postorder);
            if(high - 1 > end + 1)
                res = res && dfs(end + 1, high - 1, postorder);
            return res;
        }
        else{
            return false;
        }
    }
}

为什么时间复杂度:O(N * N)???

因为最坏的情况下,相当于这棵树会变成一个链表,比如 123456789,第一次循环,需要遍历所有的元素,也就是O(N), 第二次也会遍历所有元素O(N - 1),最终就是 O(N) + O(N - 1)+O(N - 2)+.....+O(1) == O(N * (N + 1) /  2),也就是O(N  *  N)级别.

3.结果

 

4.想法

二叉搜索树概率不清楚

单靠后续遍历不足以确定一棵树的样子,除非加上一些限制条件,比如这里的二叉搜索树

官方题解还有O(N)的解法,单调栈,还没细看

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号