【LeetCode剑指offer33】二叉搜索树的后序遍历序列(找分界点)

简介: 单纯根据后序遍历序列,不阔能确定一棵二叉树,但是事先说明是二叉搜索树BST了,BST树的特点是中序遍历序列,是有序序列,而且根结点val大于左孩子val,小于右孩子val。

一、题目


image.png

二、思路

单纯根据后序遍历序列,不阔能确定一棵二叉树,但是事先说明是二叉搜索树BST了,BST树的特点是中序遍历序列,是有序序列,而且根结点val大于左孩子val,小于右孩子val。


而且题目给出后序遍历序列,最后一个节点是根结点,我们就能从头遍历数组,找到第一个比根结点大的节点位置(分界点),在此前面的部分,都是根结点的左子树部分;分界点后面部分理应是右子树部分,所以val也理应该大于根结点。所以基于这点,我们只要判断分界点后的结点值,是否有小于根结点的这种异常情况,则说明不是BST的后序序列。


三、代码

class Solution {
public:
    bool verifyPostorder(vector<int>& postorder) {
        return dfs(postorder, 0, postorder.size() - 1);
    }   
    bool dfs(vector<int>& postorder, int left, int right){
        //如果数组中只剩下一个元素或没有元素,则肯定满足
        if(left >= right){
            return true;
        }
        int temp = left;
        //找分界点
        while(postorder[temp] < postorder[right]){
            temp++;
        }
        int a = temp;
        //判断分界点后面的结点val,是否还有小于根结点val的
        while(temp < right){
            if(postorder[temp++] < postorder[right]){
                return false;
            }
        }
        return dfs(postorder, left, a - 1) 
               && dfs(postorder, a, right - 1);
    }
};
相关文章
|
3月前
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
19 1
|
3月前
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
24 1
|
3月前
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
50 0
|
3月前
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
15 0
|
3月前
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
27 0
|
4月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
68 6
|
5月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
136 2
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
71 1
|
4月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口