当前位置: 首页 > 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指针的值会依次增大,满足代码中的判断条件;如果不是则相反。
http://www.xdnf.cn/news/236899.html

相关文章:

  • 论MMUSMMUIOMMU
  • 分支限界法:用“快递分拣”思维解决复杂问题的算法艺术
  • 数据清洗的定义跟实际操作
  • 文件读取操作
  • Java 事务详解
  • allegro 怎样显示/隐藏铜皮shape?
  • AI时代生产工厂制造业数字化转型培训师培训讲师唐兴通教授专家顾问清华大学讲授AI库存降本增效智能制造供应链生产调度智能管理设备健康
  • Python math 库教学指南
  • Kubernetes 核心组件架构详解
  • git中reset和checkout的用法
  • C语言实现库函数strlen
  • 健康养生:构建健康生活的多维度指南
  • curl和wget的使用介绍
  • 修改apk包名
  • 使用atomic实现无锁方式的全局变量访问
  • 美林数据基于大模型的设备智能运维检修方案—驱动设备运检业务效率跃迁
  • 基于SpringBoot的旅游网站的设计与实现
  • spring boot中@Validated
  • pytorch对应gpu版本是否可用判断逻辑
  • JWT GenTokenParseToken
  • AnimateCC教学:形状补间动画的代码实现
  • 零改造实现MySQL加密:安当TDE透明加密与KSP密钥管理系统的创新实践
  • Kaggle比赛入门攻略(以 Titanic 为例)
  • 玩转MCP
  • C# dataGridView分页
  • JMeter WebSocket 压测详细步骤(支持 ws+proto 协议)
  • flutter 专题 五十六 Google 2020开发者大会Flutter专题
  • 驱动车辆诊断测试创新 | 支持诊断测试的模拟器及数据文件转换生成
  • 斯坦福RGA软件 老版本和兼容Windows 11版本可选
  • 在 OpenSearch 中建立有效的混合搜索: 技术和最佳实践