当前位置: 首页 > 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;}
};

相关文章:

  • 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)
  • 定扭矩微压痕工具试验台
  • 一箭六星,朱雀二号改进型遥二运载火箭发射成功
  • 国际乒联主席索林:洛杉矶奥运会增设混团是里程碑事件
  • 探秘多维魅力,长江经济带、珠三角媒体总编辑岳阳行启动
  • 媒体:中国女排前队长朱婷妹妹被保送浙大受质疑,多方回应
  • 贵州省委军民融合发展委员会办公室副主任李刚接受审查调查
  • 专家:家长要以身作则,孩子是模仿者学习者有时也是评判者