LeetCode 255. 验证前序遍历序列二叉搜索树(单调栈)*
文章目录
- 1. 题目
- 2. 解题
- 2.1 递归超时解
- 2.2 单调栈
1. 题目
给定一个整数数组,你需要验证它是否是一个二叉搜索树正确的先序遍历序列。
你可以假定该序列中的数都是不相同的。
参考以下这颗二叉搜索树:5/ \2 6/ \1 3
示例 1:
输入: [5,2,6,1,3]
输出: false示例 2:
输入: [5,2,1,3,6]
输出: true进阶挑战:
您能否使用恒定的空间复杂度来完成此题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/verify-preorder-sequence-in-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 递归超时解
- 检查左边小于root,右边是否都大于root,时间复杂度O(n2)
class Solution {public:bool verifyPreorder(vector<int>& preorder) {if(preorder.size() <= 2) return true;return check(preorder, preorder[0], 1, preorder.size()-1);}bool check(vector<int>& arr, int root, int l, int r){if(l>=r) return true;int split = l, i;while(split <= r && arr[split] < root)split++;//左边部分比我root小i = split;for(i = split; i <= r; ++i)if(arr[i] < root)//右边部分因该都比我大,此处复杂度较高return false;return check(arr, arr[l], l+1, split-1) && (split > r ||check(arr, arr[split], split+1, r));}
};
2.2 单调栈
class Solution {map<int,int> m;
public:bool verifyPreorder(vector<int>& preorder) {if(preorder.size() <= 2) return true;int MIN = INT_MIN;stack<int> s;for(int i = 0; i < preorder.size(); ++i){if(preorder[i] < MIN)return false;while(!s.empty() && s.top() < preorder[i])//遇到大的了,右分支{MIN = s.top();//记录弹栈的栈顶为最小值s.pop();}s.push(preorder[i]);}return true;}
};
100 ms 21.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 255. 验证前序遍历序列二叉搜索树(单调栈)*相关推荐
- 1008. 前序遍历构造二叉搜索树
文章目录 1008. 前序遍历构造二叉搜索树 一.解题思路 特殊边界 二.使用单调栈优化 1008. 前序遍历构造二叉搜索树 给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并 ...
- 快到十月份了希望到时候中期通过并拿到offer,恐惧又憧憬未来的小黑的leetcode之旅:1008. 前序遍历构造二叉搜索树 三轮面试通过。准备和老黑们和阿黄吃海底捞~
小黑做法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, r ...
- leetcode 1008. Construct Binary Search Tree from Preorder Traversal | 1008. 前序遍历构造二叉搜索树(Java)
题目 https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal/ 题解 好题. 我知道需要用 ...
- 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
[LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...
- 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...
- 中序遍历解决二叉搜索树问题
中序遍历解决二叉搜索树问题 Python3 树 深度优先搜索 通过中序遍历二叉搜索树得到的关键码序列是一个递增序列. 这是二叉搜索树的一个重要性质,巧妙利用这一性质可以解决一系列二叉搜索树问题. 本系 ...
- 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...
- [Leetcode][第99题][JAVA][恢复二叉搜索树][中序遍历]
[问题描述][困难] [解答思路] 1. 显示中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public void recoverTree(TreeNode r ...
- 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算
1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...
最新文章
- Java JTextArea参数介绍
- set/multiset/unordered_set和map/multimap/unordered_map基础汇总
- java的super_Java中this和super的用法总结
- 如何修改订单金额实现 0.01 元买 iPhone X?
- Windows下定时器与多线程的区别
- hive get_json_object json_tuple json解析详解
- linux性能监测工具
- 物联网监测之光纤振动传感器
- 《App 后台开发运维和架构实践》完整目录
- Android 应用内部打开PDF文件
- Heka采集系统Output插件开发
- 实验四+049+尤帆贤
- 集总参数电路抽象---线性电路叠加定理理解
- 【小样本基础】有监督小样本,半监督小样本,无监督小样本
- Pinbox 使用快捷键打开网页
- 图论 SCC(CCF高速公路)
- Java:如何选择一个好的Java外包合作伙伴?
- 我和ChatGPT pair 整理的测试类型清单
- RabbitMQ:The channelMax limit is reached. Try later.
- Python 抖音无水印视频下载
热门文章
- vue 鼠标点击事件_VBA代码解决方案第115讲:点击鼠标实现精准控制触发事件的VBA代码第二方案...
- linux servlet 乱码问题,Servlet一次乱码排查后的总结
- include包含头文件的语句中,双引号和尖括号的区别
- Mysql安装后在服务里找不到和服务启动不起来的解决方法
- innobackupex备份工具
- Angular CLI的简单使用(1)
- 生成 excel 直接用 httpServletResponse 输出
- 十大经典算法 - 转载
- [UWP]做个调皮的BusyIndicator
- 转!!ftp的主动模式(port)与被动模式(PASV)