剑指Offer——二叉搜索树的后序遍历序列 Java

本文介绍了一个算法,用于判断一个整数数组是否为二叉搜索树的后序遍历结果。通过递归地检查左子树的所有元素是否小于根节点,右子树的所有元素是否大于根节点,来确定数组是否符合二叉搜索树的后序遍历特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

题目解析

结合 重构二叉树题目

两道题基本一致,都是递归左右子树。

难点:在于思考清楚 左右子树的入口(左子树的范围,右子树的范围)

对于一次递归中的思路是:

先从一棵树的最左侧开始,若都小于该树的root 就向右滑动,直到遇到第一个比root大的值(左子树都应该< root)

然后再从第一个大的值开始,继续向右遍历(右子树都应该>root),若出现 小于的情况 则直接判false;

BST的后序序列的合法序列是:对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 。

题解

public boolean VerifySquenceOfBST(int [] sequence) {
    int n = sequence.length;
    if(n <= 0 || sequence == null ) return false;
    return helper(sequence,0,n-1);

}

    public boolean helper(int []sequence,int lo ,int hi){
        // 递归出口 当lo == hi 时候表示当前节点即自己为根
        // lo > hi 时候 表示出现null 节点
        if (lo >= hi ) return  true;
        int root = sequence[hi];
        int i = lo;
        while (i < hi){
            if (sequence[i] > root) break;
            i++;
        }
        int j = i;
        while (j < hi){
            if (sequence[j] < root) return false;
            j++;
        }
        //  划清左右子树范围,递归左右子树
        return helper(sequence,lo,i-1) && helper(sequence,i,hi-1);
    }
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值