LeetCode 验证二叉搜索树的两种不同题型
一、leetcode 98. 验证二叉搜索树
- 通过辅助函数增加参数进行判断。
- 虽然节点值在INT范围内,但要求其中序遍历序列严格单调递增,因此等于也不行,而且需要用LONG_MIN\LONG_MAX初始化最大最小值。
using ll = long long;
class Solution {
protected:
bool isBST(TreeNode* root, ll leftMin, ll rightMax){
if(!root) return true;
if(root->val <= leftMin || root->val >= rightMax){
return false;
}
return isBST(root->left, leftMin, root->val) && isBST(root->right, root->val, rightMax);
}
public:
bool isValidBST(TreeNode* root) {
if(!root) return true;
return isBST(root, LONG_MIN, LONG_MAX);
}
};
二、leetcode 255. 验证前序遍历序列二叉搜索树
验证前序遍历序列是否满足二叉搜索树要求。
由于前序遍历的顺序为: root →left → right;
故遍历左子树的时候是递减的,可以用单调队列来进行维护。
对序列元素进行遍历,
如果当前元素小于最新出栈的元素,则必定不是二叉搜索树。
如果栈不空,而且当前元素val大于栈顶元素,说明开始进入右子树,那么弹出栈顶元素,更新到【最新栈顶元素pre】,直到该元素小于栈顶元素。
当前元素入栈
能遍历完所有元素,则为二叉搜索树。
class Solution {
public:
bool verifyPreorder(vector<int>& preorder) {
int pre = INT_MIN;
stack<int> monoStack;
for(int i = 0; i < preorder.size(); i++){
int curVal = preorder[i];
if(curVal < pre){
return false;
}
while(!monoStack.empty() && monoStack.top() < curVal){
pre = monoStack.top();
monoStack.pop();
}
monoStack.push(curVal);
}
return true;
}
};
//5 2 1 3 6
LeetCode 验证二叉搜索树的两种不同题型的更多相关文章
- 二叉搜索树的两种实现(数组模拟,STL)
书上实现: 二叉搜索数的特点:高效实现 插入一个数值,查询是否包含某个数值,删除某一个数值. 所有的节点都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大的特点. 查询:如果当前数值 ...
- LeetCode - 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. ...
- 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
LeetCode 654.最大二叉树 分析1.0 if(start == end) return节点索引 locateMaxNode(arr,start,end) new root = 最大索引对应节 ...
- [LeetCode] Validate Binary Search Tree 验证二叉搜索树
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- [LeetCode] 98. Validate Binary Search Tree 验证二叉搜索树
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
- LeetCode(98): 验证二叉搜索树
Medium! 题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- LeetCode第[98]题(Java):Validate Binary Search Tree(验证二叉搜索树)
题目:验证二叉搜索树 难度:Medium 题目内容: Given a binary tree, determine if it is a valid binary search tree (BST). ...
- LeetCode初级算法--树02:验证二叉搜索树
LeetCode初级算法--树02:验证二叉搜索树 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- [LeetCode] 255. Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
随机推荐
- JS -- Ajax -- 手稿
- VMware vCenter Server 7.0U3r 下载 - 修复堆溢出 (远程执行代码) 和本地权限提升漏洞
VMware vCenter Server 是一款高级服务器管理软件,提供了一个集中式平台来控制 vSphere 环境,以实现跨混合云的可见性. 简化且高效的服务器管理 什么是 vCenter Ser ...
- Odoo17.0 基于企业微信的备用金和费用报销
前面讲过了企业微信的基础应用,现在我们来看一下如何借助企业微信的审批端能力结合odoo来实现企业中的两大常规业务流程备用金和费用报销. 企业微信端设置 我们这里使用的是企业微信的原生审批流程,因此我们 ...
- 在Windows系统中解决端口占用问题
在Windows系统中,你可以通过以下步骤查询并结束占用8001端口的进程: 查询占用8001端口的进程: 打开命令提示符(CMD)或者PowerShell,并执行以下命令: netstat -a ...
- ArchLinux Vmware安装指北
ArchLinux Vmware安装指北 在本文开始之前,首先允许我提前声明一点,Arch Linux的安装并不算难,但是绝对也算不上简单,中间的安装可能会遇到很多问题,本篇文章不能保证完全贴合你的真 ...
- Excel VBA编程常用语句300句
定制模块行为 1. Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Opt ...
- 【Java】在树结构中给节点追加数据
一.功能需求 有个树状组件,展示区域层级,每个区域节点需要展示该地区下的统计信息 从来没做过,给我整不会了属实是 二.功能分析 原型有功能和老系统代码,查看源码后发现的结构框架 1.树组件是自己用ul ...
- 【Git】下载安装(Linux)
安装CentOS8貌似有自带Git 可以先查看一下有没有 git --version 有或者没有都行,有的话安装就当是更新 没有就装,yum提供了安装,我们不需要自己压缩包安装了 yum instal ...
- conda报错、anconda报错:requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
anconda报错,报错信息: requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 不能使用c ...
- 【转载】 浅谈PyTorch的可重复性问题(如何使实验结果可复现)
原文地址: https://www.zhangshengrong.com/p/9MNlDK09NJ/ ================================================ ...