力扣98.验证二叉搜索树

news/2025/2/24 10:31:06

文章目录

  • 力扣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


算法思路

  • 基于二叉搜索树的性质:中序遍历一棵二叉搜索树将获得一个递增序列
  • 采用中序遍历的思路,对该二叉树进行中序遍历,每次遍历到的值与前一次遍历到的值比较,如果不是递增的,就返回false表示这不是一棵二叉搜索树
  • 时间复杂度O(n)

代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 int pre;//前一次遍历到的值
 bool first;//是否是第一次遍历的标志
bool InOrder(struct TreeNode * root)
{
 if(root==NULL) return true; 
 if(!InOrder(root->left)) return false;//若左子树不是二叉搜索树,返回false;

 if(root->val<=pre&&!first) return false;//若当前遍历的值没有比前一个大,返回false
 else { pre=root->val;  first=false; }//更新pre
 
 if(!InOrder(root->right)) return false;//若右子树不是二叉搜索树,返回false;
 return true;
}
bool isValidBST(struct TreeNode* root){
    first=true;
    return InOrder(root);
}

在这里插入图片描述


http://www.niftyadmin.cn/n/28894.html

相关文章

模拟实现一个简单的命令行解释器(shell)

目录 前言 环境变量与本地变量 和环境变量相关的命令 获取环境变量的三种方法 第一种 第二种 第三种 进程地址空间 页表 为什么存在进程地址空间 第一 第二 第三 进程控制 进程的产生 进程终止 进程等待 进程替换 模拟实现一个shell 前言 我们通过各种指令来实现…

行列式的定义

排列的逆序数 对于一个排列&#xff0c;如果是从到到尾都是从小到大&#xff0c;那么逆序数(number of permutation inversions)就为0.只要出现一次大的在前&#xff0c;小的在后&#xff0c;逆序数就加一次。逆序数的符号是希腊字母τ\tauτ,读音为“涛",比如以下排列&am…

【网络安全】WiFi密码爆破教程

WiFi密码爆破教程前言一、什么是暴力破解&#xff1f;二、准备破解工具1.VMware Pro 16 虚拟机安装2. VMware安装Kali Linux3. kali监听无限网卡三、WiFi密码暴力破解1. 虚拟机连接USB网卡2. 扫描附近WiFi3. 查看目标WiFi连接设备4. 抓包5. 破解前言 暴力破解攻击是指攻击者通…

【Java开发】Spring Cloud 05 :远程服务调用Openfeign 替代 WebClient

在前边章节中&#xff0c;我们借助 Nacos 的服务发现能力&#xff0c;使用 WebClient 实现了服务间调用。从功能层面上来讲&#xff0c;我们已经完美地实现了微服务架构下的远程服务调用&#xff0c;但是从易用性的角度来看&#xff0c;这种实现方式似乎对开发人员并不怎么友好…

Cadence PCB仿真使用Allegro PCB SI查看仿真波形的方法图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,拓扑提取阶段仿真方法3,图纸设计阶段仿真方法4,总结1,概述 本文简单介绍使用Alegro PCB SI执行仿真查看仿真波形的两种方法。 2,拓扑提取阶段仿真方法 如下图在拓扑提取阶段,添加完激励…

华为OD机试 - 日志限流

题目描述 某软件系统会在运行过程中持续产生日志,系统每天运行N单位时间,运行期间每单位时间产生的日志条数保行在数组records中。records[i]表示第i单位时间内产生日志条数。 由于系统磁盘空间限制,每天可记录保存的日志总数上限为total条。 如果一天产生的日志总条数大于…

宝贝代码部署笔记

记录前后端分离项目部署到云服务器&#xff1b;前端使用vue&#xff0c;element-ui&#xff0c;axios&#xff0c;router进行开发&#xff1b;后端使用springboot&#xff0c;mybatis&#xff0c;MySQL进行开发&#xff1b;完整记录前端项目npm打包静态文件&#xff0c;后端项目…

第53章 SQL GROUP BY 语句教程

GROUP BY 语句可结合一些聚合函数来使用 GROUP BY 语句 GROUP BY 语句用于结合聚合函数&#xff0c;根据一个或多个列对结果集进行分组。 SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY c…