Leetcode刷题详解——验证二叉搜索树

news2024/7/4 5:13:48

1. 题目链接:98. 验证二叉搜索树

2. 题目描述:

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

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

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

示例 1:

img

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

示例 2:

img

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

提示:

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

3. 解法(利用中序遍历):

中序遍历按照左子树->根节点->右子树的顺序遍历二叉树的所有节点,通常用于二叉搜索树相关的题目。

3.1 算法思路:

如果一棵树是二叉搜索树,那么它的中序遍历的结果一定是一个严格递增的序列

因此,我们可以初始化一个无穷小的全区白变量,用来记录中序过程中的前驱节点。那么就可以在中序遍历的过程中,先判断是否和前驱节点构成递增序列,然后修改前驱节点为当前节点,传入下一层的递归中。

3.2 算法流程:

  1. 初始化一个全局遍历prev,用来记录中序遍历过程中的前驱节点的val
  2. 中序遍历的递归函数中:
    1. 设置递归出口:root==nullptr的时候,返回true
    2. 先递归判断左子树是否是二叉搜索树,用retleft标记
    3. 然后判断当前节点是否满足二叉树搜索树的性质,用retcur标记:
      1. 如果当前节点的val大于prev,说明满足条件,retcur改为true
      2. 如果当前节点的val小于等于prev,说明不满足条件,retcur改为false
    4. 最后递归判断右子树是否是二叉搜索树,用retright标记
  3. 只有当retleftretcurretright都是true的时候,才返回true

请添加图片描述

3.3 C++算法代码:

/**
 * 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 {
    long prev=LONG_MIN;
public:
    bool isValidBST(TreeNode* root) {
        if(root==nullptr) return true;
        bool left=isValidBST(root->left);
        //剪枝
        if(left==false) return false;
        bool cur=false;
        if(root->val>prev) cur=true;
        //剪枝
        if(cur==false) return false;
        prev=root->val;
        bool right=isValidBST(root->right);  
        //剪枝
        if(right==false) return false;
        return cur&&left&&right;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网安须知|什么是护网行动?什么是红蓝对抗?<文末有福利>

01 什么是护网行动 护网行动是以公安部牵头的&#xff0c;用以评估企事业单位的网络安全的活动。 具体实践中&#xff0c;公安部会组织攻防两方&#xff0c;进攻方会在一个月内对防守方发动网络攻击&#xff0c;检测出防守方&#xff08;企事业单位&#xff09;存在的安全漏洞…

IC设计之《集成电路设计宝典》,共423页,可打印,快来领取吧~~~

集成电路&#xff08;integrated circuit&#xff09;是一种微型电子器件或部件。采用一定的工艺&#xff0c;把一个电路中所需的晶体管、电阻、电容和电感等元件及布线互连一起&#xff0c;制作在一小块或几小块半导体晶片或介质基片上&#xff0c;然后封装在一个管壳内&#…

com.alibaba:tools:jar com.alibaba:jconsole:jar

com.alibaba:tools:jar com.alibaba:jconsole:jar

Ubuntu20.04下Salome_meca 2022软件安装(支持GPU加速)

一、什么是Salome_meca &#xff1f; Salome_meca 是一个开源的有限元分析软件套件&#xff0c;主要用于模拟和分析复杂的力学问题。它是 Salome 平台的一部分&#xff0c;Salome 是一个通用的集成化软件环境&#xff0c;用于建模、预处理、模拟和后处理各种复杂的工程和科学问…

java毕业设计之大学生社团管理系统(ssm框架+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的大学生社团管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 管理员&#xff1a;首页、个…

一键批量视频剪辑、合并,省时省力,制作专业视频

在当今数字化的时代&#xff0c;视频制作的需求日益增长。无论是个人用户还是专业人士&#xff0c;都需要能够快速、高效地处理视频&#xff0c;以适应不同的需求。但是&#xff0c;视频剪辑和合并往往是一个耗时且需要专业技能的过程。有没有一种方法可以简化这个过程&#xf…

Path Finder v2162(可以替代访达的文件管理器)

Path Finder是一款Mac平台上的文件管理和操作工具&#xff0c;提供了比Finder更丰富的功能和更直观的用户界面。它可以帮助用户更高效地浏览、复制、移动、删除和管理文件&#xff0c;以及进行各种高级操作。 Path Finder的主要功能包括&#xff1a; - 文件浏览&#xff1a;可以…

京东按关键词搜索商品列表接口:竞品分析,商品管理,营销策略制定

京东搜索商品列表接口是京东开放平台提供的一种API接口&#xff0c;通过调用该接口&#xff0c;开发者可以获取京东平台上商品的列表数据&#xff0c;包括商品的标题、价格、库存、月销量、总销量、详情描述、图片等信息。 接口的主要作用包括&#xff1a; 市场调研&#xff…

如何评价C语言形式化语义工作Clight ?

如何评价C语言形式化语义工作Clight &#xff1f; 编程语言的形式语义一即合法程序及 其行为的数学规范。 现实编程语言的形式语义庞大且复杂。这就提出了验证这些语义的问题:我们如何确保它们正确捕最近很多小伙伴找我&#xff0c;说想要一些C语言的资料&#xff0c;然后我根…

【容器化】Docker

文章目录 概述环境配置的难题虚拟机Linux 容器Docker 核心概念安装命令启动与停止命令镜像相关命令容器相关命令 部署MySQL 部署Tomcat 部署Nginx 部署Redis 部署 迁移与备份Dockerfile 制作镜像Docker 私有仓库将镜像上传到私有仓库从私有仓库拉取镜像 来源 概述 环境配置的难…

[unity]深色模式/浅色模式

这里用的是Windows版的unity&#xff0c;具体版本号如下&#xff1a; 选项的路径如下&#xff1a;Edit—Preferences—General—Editor Theme 然后就可以选是dark还是light了&#xff1a;

在微信小程序中怎么实现刮刮卡抽奖活动

在当今的数字化时代&#xff0c;微信小程序已经成为一种广泛使用的营销工具。通过各种互动活动&#xff0c;企业可以吸引用户的关注&#xff0c;提升品牌影响力。其中&#xff0c;刮刮卡抽奖活动是一种特别受欢迎的形式。本文将为你详细介绍如何在微信小程序中实现刮刮卡抽奖活…

word办公小技巧:方框打勾、上下标、横隔线、排序

Word文件制作过程中&#xff0c;需要了解一些可以提高效率的小技巧帮助我们能够更快的完成工作&#xff0c;今天分享四个提高效率的小技巧 技巧一&#xff1a;方框内打√ 想要在word文件中设置出方框内√&#xff0c;的效果&#xff0c;在word文件中输入&#xff1a; ☑&…

Si24R04 无线发射芯片是什么芯片

Si24R04的应用领域&#xff1a;用于无线遥控、体感设备 &#xff0c;有源RFID&#xff0c;校讯通&#xff0c;智能电网&#xff0c;智能家居&#xff0c;无线数据传输模块等等。Si24R04是一款高度集成的低功耗SOC芯片&#xff0c;其集成了基于RISC-V核的低功耗MCU和工作在2.4GH…

Vue集成海康websdk实现摄像头预览

选择以及下载相应的websdk&#xff1a; 从海康开放平台下载相应的sdk&#xff0c;web3.0不支持高版本浏览器&#xff0c;web3.2需要摄像头支持摄像头取流&#xff0c;web3.3支持高版本浏览器 我这选择的是3.3的。可以先测试下开发包是否可以成功访问&#xff0c;修改用ip、户名…

渲染流程之应用阶段及几何处理阶段

需要了解渲染流程&#xff08;四个阶段&#xff09;&#xff0c;屏幕显示原理&#xff08;电子枪换行扫描及Vsync信号出现的原因&#xff09; 什么是图元&#xff1a; 通常是三角形&#xff0c;线段&#xff0c;顶点等图形&#xff0c;所有的复杂几何图形都是由这些构成的 在…

oj赛(双周赛第十四次)

目录 神器宝盒 特殊数字 神秘门的密码 找鸭子 银河间的数字之战 小码哥的英语 小码哥的艰难选择 小码哥搭建花圃 科学记数法 世界警察 中转站 安全验证 旅行 计算机的算力比我们强太多了 &#xff0c;如果是拼单纯的计算力和算力我们毫无胜算 神器宝盒 难度&#…

无线电设备出口欧盟新版RED认证标准指令(EU)2023/2392

2023 年 10 月 4 日&#xff0c;欧盟委员会在欧盟官方公报上发布了指令&#xff08;EU&#xff09;2023/2392 号实施决定&#xff0c;其中包含支持无线电设备指令的新协调标准。这些新协调标准涉及国际移动通信、蜂窝网络设备和数字音频广播发射设备等。自发布之日起&#xff0…

表象变换与矩阵元

表象变换 一维粒子哈密顿量 表象中的矩阵元 态的表象变换 不难证明 算符的表象变换 坐标表象 Non-denumerable basis

Linux 安装 Nginx 并配置为系统服务(超详细)

目录 前言安装 Nginx安装依赖项下载Nginx解压Nginx编译和安装防火墙设置启动Nginx 配置 Nginx 为系统服务配置 Nginx 服务文件启动 Nginx 服务设置开机自启动检查 Nginx 状态停止 Nginx 服务重启 Nginx 服务 卸载 Nginx结语 前言 Nginx是一款卓越的高性能Web服务器&#xff0c…