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

Java二叉搜索树的后续遍历(递归)

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

Java二叉搜索树的后续遍历(递归)

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

解题思路:
1. 二叉搜索树的特点:
二叉搜索树中根节点的值大于左子树中的任意一个节点的值,
小于右子树中的任意一个节点 的值
2. 后序遍历顺序: 左子树–>右子树–>根节点

class Solution {
    public boolean verifyPostorder(int[] postorder) {
        if(postorder.length < 2) return true;
        return verify(postorder, 0, postorder.length - 1);
    }
    public boolean verify(int[] postorder, int left, int right){
        //说明数组元素 <= 1
        if(left >= right) return true;
        //从后序遍历可知,数组最后一个元素为根节点
        int root = postorder[right];
        int k = left;
        //从后序遍历可知,
        //第一个大于根节点的 节点 之后的 所有节点 都大于根节点
        //让指针 k 从数组最开始遍历,找出第一个大于根节点的节点
        while(k < right && postorder[k] < postorder[right]){
            k++;
        }
        //从第一个大于根节点的节点开始遍历
        //判断之后出现的节点的值是否都大于根节点的值
        //出现小于根节点的情况,直接返回false
        for(int i = k; i < right; i++){
            if(postorder[i] < root) return false;
        }
        //检查左子树
        if(!verify(postorder, left, k - 1)) return false;
        //检查右子树
        if(!verify(postorder, k, right - 1)) return false;
        return true;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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