当前位置: 首页 > news >正文

力扣hot100——98.验证二叉搜索树

题目链接:98. 验证二叉搜索树 - 力扣(LeetCode)

首先列举一个错误代码

class Solution {
public:bool isValidBST(TreeNode* root) {if(root==nullptr) return true;if(root->right){if(root->right->val<=root->val) return false;} if(root->left){if(root->left->val>=root->val) return false;}return isValidBST(root->left)&&isValidBST(root->right);}
};

反例:
image.png
这段代码仅关注于局部,仅考虑根节点的左右结点是否满足二叉搜索树的条件,没有考虑根结点的整个左右子树是否满足二叉搜索树的条件。

修正: 抓住二叉搜索树的一个性质:二叉搜索树的中序遍历是升序的。用递归的方法中序遍历二叉搜索树,用pre记录前一个结点,并在中间和当前的根节点比较。

class Solution {
public:TreeNode* pre=nullptr;bool isValidBST(TreeNode* root) {//递归终止的条件if(root==nullptr) return true;//遍历左子树if(!isValidBST(root->left)) return false;//判断是否是二叉搜索树if(pre!=nullptr&&pre->val>=root->val) return false;pre=root;//遍历右子树return isValidBST(root->right);}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
    关于pre指针的一些思考: 如果是二叉搜索树,按照中序遍历,pre指针的值会依次增大,满足代码中的判断条件;如果不是则相反。

相关文章:

  • Python 数据智能实战 (4):智能用户分群 - 融合行为
  • libevent详解
  • Kubernetes Service 详解
  • 《Ultralytics HUB:开启AI视觉新时代的密钥》
  • 复杂度和顺序表(双指针方法)
  • HOW - 经典详情页表单内容数据填充(基于 Antd 组件库)
  • NLP 分词技术学习
  • Qwen 2.5 VL多模态模型的应用
  • 力扣——20有效的括号
  • 10、属性和数据处理---c++17
  • PCB设计工艺规范(二)基本布局要求
  • 虚拟机centos7安装docker
  • 第 12 届蓝桥杯 C++ 青少组中 / 高级组省赛 2021 年 4 月 24 日真题
  • 深入掌握CSS背景图片:从基础到实战
  • hadoop集群建立
  • git 怎样把本地仓库推送到新建的远程仓库
  • Map系列之ConcurrentHashMap源码分析:高并发场景下的性能密码
  • DirectX12(D3D12)基础教程七 深度模板视图\剔除\谓词
  • 【Scrapy】简单项目实战--爬取dangdang图书信息
  • Java泛型(补档)
  • 西部航空回应飞机上卖彩票:与重庆福彩合作,仅部分航班售卖
  • 朝鲜海军新型驱逐舰进行首次武器系统测试
  • 北大深圳研究生院成立科学智能学院:培养交叉复合型人才
  • 我国将开展市场准入壁垒清理整治行动
  • 我国成功发射卫星互联网低轨卫星
  • 第二艘国产大型邮轮实现坞内起浮,重点强化邮轮供应链本土化建设