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

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

题目描述

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

在这里插入图片描述

解答
class Solution {
    /**
    递归分治:
        根据二叉搜索树的定义,可以通过递归,判断所有子树的正确性(即其后序遍历是否满足二叉搜索树的定义),
        若所有子树都正确,则此序列为二叉搜索树的后序遍历
    
    递归解析:
        终止条件:当 i>=j,说明此子树节点数量≤1,无需判断正确性,因此直接返回true;

        递推工作:
            划分左右子树:
                遍历后续遍历的[i,j]区间元素,寻找第一个大于根节点的节点,索引记为m。
                此时,可划分出左子树区间[i,m-1]、右子树区间[m,j-1]、根节点索引j
            判断是否为二叉搜索树:
                左子树区间[i,m-1]内的所有节点都应 < postorder[j]。而“划分左右子树”时已经保证
                左子树区间的正确性,因此只需要判断右子树区间即可。

                右子树区间[m,j-1]内的所有节点都应 > postorder[j]。实现方式为遍历,当遇到 ≤ postorder[j]
                的节点则跳出;则可通过p == j判断是否为二叉搜索树
        
        返回值:所有子树都需正确才可判定正确,因此使用与逻辑符&&链接
            p == j:判断此树是否正确
            isBSTree(i,m-1):判断左子树是否正确
            isBSTree(m,j-1):判断右子树是否正确
    
     */
    public boolean verifyPostorder(int[] postorder) {
        return isBSTree(postorder,0,postorder.length-1);
    }

    public boolean isBSTree(int[] postorder,int i,int j){
        if(i >= j){
            return true;
        }
        int l = i;
        while(postorder[l] < postorder[j]){
            l++;
        }
        int m = l;
        int  p = m;
        while(postorder[p] > postorder[j]){
            p++;
        }

        if(p != j){
            return false;
        }else{
            return isBSTree(postorder,i,m-1) && isBSTree(postorder,m,j-1);
        }
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值