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

力扣HOT100之二叉树:98. 验证二叉搜索树


这道题之前也刷过,自己做了一遍,发现卡在了第70多个样例,才发现自己没有利用二叉搜索树的性质,但凡涉及到二叉搜索树,应该首先考虑中序遍历!!!
被卡住的测试样例是这样的:

虽然每个左子树和右子树都是二叉搜索树,但是没有满足右子树中所有元素都大于根节点元素这一性质,所以还需要进一步考虑:如何才能保证左子树的所有元素都小于当前根节点,右子树的所有元素都大于根节点?
我们需要引入一个额外的全局变量,用一个指针pre指向当前根节点的上一个遍历节点(也就是其左子树的最右下角的节点),将中序遍历的结果放到一维数组中,该指针指向的实际上就是当前节点元素的前一个元素。我们需要判断root的值和pre的值谁更大,如果pre -> val >= root -> val,就说明排列出现了问题,不满足二叉搜索树的性质,直接返回false,否则将当前节点root赋值给pre

/*** 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:TreeNode* pre = nullptr;bool isValidBST(TreeNode* root) {//涉及二叉搜索树要用中序遍历!!!if(!root) return true;  //递归终止条件//单层递归逻辑//左bool left_flag = isValidBST(root -> left);  //中if(pre && pre -> val >= root -> val)return false;pre = root;//右bool right_flag = isValidBST(root -> right);return left_flag && right_flag;}
};
http://www.dtcms.com/a/196568.html

相关文章:

  • JAVA的常见API文档(上)
  • AtCoder AT_abc406_c [ABC406C] ~
  • 蓝牙耳机什么牌子好?倍思值得冲不?
  • Typecho博客为文章添加AI摘要功能(Handsome主题优化版)
  • AGI大模型(20):混合检索之rank_bm25库来实现词法搜索
  • Redis配置与优化:提升NoSQL数据库性能的关键策略
  • 【AI算法工程师面试指北】ResNet为什么用avgpool结构?
  • 超长文本能取代RAG吗
  • 图像超分-CVPR2022-Multi-scale Attention Network for Single Image Super-Resolution
  • 黑马k8s(十)
  • 打造文本差异对比工具 TextDiffX:从想法到实现的完整过程
  • 企业级电商数据对接:1688 商品详情 API 接口开发与优化实践
  • 信道编码技术介绍
  • 数值分析知识重构
  • 我与 CodeBuddy 携手打造 FontFlow 字体预览工坊
  • OpenHarmony平台驱动使用 (二),Camera
  • java.lang.ArithmeticException
  • nt!MiRemovePageByColor函数分析之脱链和刷新颜色表
  • Linux面试题集合(2)
  • 定扭矩微压痕工具试验台
  • Python绘制克利夫兰点图:从入门到实战
  • 30、WebAssembly:古代魔法——React 19 性能优化
  • OCC笔记:Brep格式
  • Scanner对象
  • Go语言实现链式调用
  • 2025年第三届盘古石杯初赛(智能冰箱,监控部分)
  • Docker数据卷
  • docker迅雷自定义端口号、登录用户名密码
  • Elasticsearch 官网阅读之 Term-level Queries
  • 校园导游大模型介绍