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

98. 验证二叉搜索树【 力扣(LeetCode) 】

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
  • 四、参考代码

零、原题链接


98. 验证二叉搜索树

一、题目描述

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

二、测试用例

示例 1:

在这里插入图片描述

输入:root = [2,1,3]
输出:true

示例 2:

在这里插入图片描述

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4

提示:

树中节点数目范围在[1, 104]-2^31 <= Node.val <= 2^31 - 1

三、解题思路

  1. 基本思路:
      二叉搜索树中序遍历是有序序列,反过来也是正确的,即二叉树的中序遍历为有序序列,则该二叉树是二叉搜索树;所以只要检查二叉树的中序遍历是否有序即可。
  2. 具体思路:
    • 节点为空,返回 true ;
    • 左子树不是二叉搜索树,或者当前节点的值小于等于其前驱,返回 false
    • 更新前驱值为当前节点的值,用于后继节点使用;
    • 根据右子树是否为二叉搜索树来返回结果。

四、参考代码

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( h ) \Omicron(h) O(h)

/**
 * 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) {}
 * };
 */
#include <limits.h>
class Solution {
public:
    long int last = LONG_MIN;
    bool isValidBST(TreeNode* root) {
        if (!root)
            return true;

        if (!isValidBST(root->left) || root->val <= last)
            return false;

        last = root->val;

        return isValidBST(root->right);
    }
};

http://www.kler.cn/a/407668.html

相关文章:

  • 电子应用设计方案-19:智能云饭锅系统方案设计
  • 解决登录Google账号遇到手机上Google账号无法验证的问题
  • Android Gradle 插件和 Android Studio 兼容性
  • 《现代制造技术与装备》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
  • 大模型部署,运维,测试所需掌握的知识点
  • 深挖`React`里程碑之作`AutoStore`与`helux`的渊源
  • 开源可视化工具对比:JimuReport VS DataEase
  • Android 设置 bottomnavigation 底部导航栏的样式
  • 【从零开始的LeetCode-算法】3233. 统计不是特殊数字的数字数量
  • 数据指标与标签在数据分析中的关系与应用
  • 计算机网络-VPN虚拟专用网络概述
  • Spring Framework 的版本历史和JDK、Springboot对应关系
  • 数据预处理——相关性分析详解
  • 实验室管理流程优化:Spring Boot技术实践
  • 数据结构第一讲
  • windows C#-取消任务列表(上)
  • 解决前端页面报错:Not allowed to load local resource
  • Linux高阶——1123—
  • 恋爱通信史之身份验证和不可抵赖性
  • MySQL--库的操作
  • SpringCloud处理Websocket消息过长自动断开连接
  • Quivr - 用 AI 构建你的第二大脑
  • 网络安全服务人才发展路线图
  • Spring Boot OA:企业数字化转型的利器
  • Python小白学习教程从入门到入坑------习题课5(基础巩固)