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

dfs(十八)98. 验证二叉搜索树

 98. 验证二叉搜索树

给你一个二叉树的根节点 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

 性质解法

        二叉搜索树的中序遍历为一个有序序列!

 解法一:vector存储

使用vector进行中序存储,最后再对vector进行一次遍历。

缺点:空间复杂度较大

class Solution {
public:
    vector<int> res;
    bool isValidBST(TreeNode* root) {
        _Inorder(root);
        for(int i = 0; i < res.size()-1; i++)
            if(res[i] >= res[i+1])
                return false;
        return true;
    }
    void _Inorder(TreeNode* root)
    {
        if(root == nullptr)
            return;
        _Inorder(root->left);
        res.push_back(root->val);
        _Inorder(root->right);
    }
};

解法二: 全局变量

可以使用一个全局变量pre来记录中序遍历当前位置之前结点大小。

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

当我们左子树不是二叉搜索树时,就没有必要继续再看右子树情况了,所以下方这边进行了剪枝操作

class Solution {
public:
    long long pre = LLONG_MIN;
    bool isValidBST(TreeNode* root) {
        if(root == nullptr)
            return true;
        bool left = isValidBST(root->left);
        if(!left || root->val <= pre) // 进行剪枝
            return false;
        pre = root->val;
        return  isValidBST(root->right);
    }
};

相关文章:

  • Linux 驱动开发笔记--1.驱动开发的引入
  • 海康ISAPI协议在智联视频超融合平台中的接入方法
  • CIR-Net:用于 RGB-D 显著性目标检测的跨模态交互与优化(问题)
  • 蓝桥杯十四届C++B组真题题解
  • DeDeCMS靶场获取wenshell攻略
  • 【B站电磁场】Transformer
  • 【QT5 多线程示例】互斥锁
  • QWen 和 DeepSeek 入门指南
  • 天梯赛 L2-012 关于堆的判断
  • 光谱仪与光谱相机的核心区别与协同应用
  • 使用 AnythingLLM 轻松部署本地知识库!
  • 雷池SafeLine-自定义URL规则拦截非法请求
  • 【MySQL】触发器与存储引擎
  • 基于开源模型的微调训练及瘦身打造随身扫描仪方案__用AI把手机变成文字识别小能手
  • 第二章 EXI协议原理与实现--7.5 Efficient XML库和OpenEXI.jar编解码交叉测试
  • Linux网络相关概念和重要知识(2)(UDP套接字编程、聊天室的实现、观察者模式)
  • XGBoost
  • 1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失)
  • 目标检测中归一化的目的?
  • 大模型agent的构建
  • 青海省交通运输厅副厅长田明有接受审查调查
  • 秘鲁总统任命前司法部长阿拉纳为新总理
  • 北京13日冰雹过后,已受理各险种报案近3万件
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名
  • 字母哥动了离开的心思,他和雄鹿队的缘分早就到了头
  • 尊严的代价:新加坡福利体系下的价值困境