当前位置:网站首页>【LeetCode】98.验证二叉搜索树
【LeetCode】98.验证二叉搜索树
2022-08-04 10:50:00 【酥酥~】
题目
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
树中节点数目范围在[1, 104] 内
-231 <= Node.val <= 231 - 1
题解
递归方法,记录上下界
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution {
public:
bool fun(TreeNode* root,long long left,long long right)
{
if(root == nullptr)
return true;
if(root->val <= left || root->val >= right)
return false;
return fun(root->left,left,root->val) && fun(root->right,root->val,right);
}
bool isValidBST(TreeNode* root) {
return fun(root,LONG_MIN,LONG_MAX);
}
};
利用中序遍历方法
得到的数列是有序的升序序列
那么该结点值必然小于前一个被遍历的结点
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution {
public:
bool isValidBST(TreeNode* root) {
stack<TreeNode*> mystack;
long long pre = LONG_MIN;
while(!mystack.empty() || root!=nullptr)
{
while(root)
{
mystack.emplace(root);
root = root->left;
}
root = mystack.top();
mystack.pop();
if(root->val <= pre)
return false;
pre = root->val;
root = root->right;
}
return true;
}
};
边栏推荐
猜你喜欢
![[Hongke case] Assembling furniture based on 3D camera](/img/00/bd04f9445add2571ad9cf276e81cb1.png)
[Hongke case] Assembling furniture based on 3D camera

解决:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING

解析treeSet集合进行自定义类的排序

航企纠缠A350安全问题 空客主动取消飞机订单

mae,mse,rmse分别利用sklearn和numpy实现

ECCV 2022 | 清华&腾讯AI Lab提出REALY: 重新思考3D人脸重建的评估方法

在 .NET MAUI 中如何更好地自定义控件

What is the terminal privilege management

Graphical Hands-on Tutorial--ESP32 One-Key Network Configuration (Smartconfig, Airkiss)

Events in August | 51CTO's 17th Anniversary Celebration, post a blog post to get gifts such as tea sets/notebooks/T-shirts!
随机推荐
CVPR 2022 | 从人体网格预测骨架,是真正的生理学骨架!
Google Earth Engine APP ——制作上传GIF动图并添加全球矢量位置
数字知识库及考学一体化平台
ThreadLocal详细分析
Maple 2022软件安装包下载及安装教程
遍历Map的四种方法
转转测试环境的标签域名实践
【Inspirational】The importance of review
什么是终端特权管理
iMeta | Baidu certification is completed, search "iMeta" directly to the publisher's homepage and submission link
Jina 实例秀|基于神经搜索的网络安全威胁检测(一)
MySQL: Integrity Constraints and Table Design Principles
Introduction to Mysql storage engine
热成像测温的原理是什么呢?你知道吗?
STM32入门开发 制作红外线遥控器(智能居家-万能遥控器)
开源一夏|ArkUI如何自定义弹窗(eTS)
CompletableFuture接口核心方法介绍
如何直击固定资产管理的难题?
Camunda整体架构和相关概念
helm安装