leetcode98. 验证二叉搜索树(java)

news2024/11/25 20:33:34

验证二叉搜索树

  • leetcode98. 验证二叉搜索树
    • 题目描述
  • 递归法
    • 解题思路
    • 代码演示
  • 中序遍历解法
    • 解题思路
    • 代码演示
  • 二叉树专题

leetcode98. 验证二叉搜索树

leetcode 98.验证二叉搜索树
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/validate-binary-search-tree

题目描述

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

递归法

解题思路

搜索二叉树是要满足左节点比头节点小,头节点比右节点小,
左子树上的最大值小于头节点,右子树的最小值,大于头节点、
在递归时,除了要判断左小于头,头小于右,
还有判断左边最大值和右边最小值分别和头节点比较,
因此我们要对递归遍历进行改造,加上最大值和最小值。

代码演示


  public boolean isValidBST(TreeNode root) {
    		//初始时 传的是 null ,null
        return process1(root,null,null);
    }

 /**
 * min 最小值
 * max 最大值
 */
  public boolean process1(TreeNode root,TreeNode min,TreeNode max){
  		//base case 
        if(root == null){
            return true;
        }
        //遍历右树时,任何值不能小于min 的值 ,否则返回false;
        if(min != null && root.val <= min.val){
            return false;
        }
         //遍历左树时,任何值不能大于max 的值 ,否则返回false;
        if(max != null && root.val >= max.val){
            return false;
        }
			//左树上的任何值 不能大于头节点的值,因此最大值传root
        boolean isLeft = process1(root.left,min,root);
        //右树上的任何值 不能小于头节点的值,因此最小值传root
        boolean isRight = process1(root.right,root,max);
        return isLeft && isRight;
    }

中序遍历解法

解题思路

中序遍历结果是: 左 头 右。
搜索二叉树特性:左 < 头 < 右,
因此遍历出来的顺序是个递增的结构,
根绝这个特性来判断是不是搜搜二叉树

代码演示


 	List<TreeNode> ans = new ArrayList<>();
 		
    public boolean isValidBST(TreeNode root) {
         process(root);
         for(int i = 1; i < ans.size();i++){
             if(ans.get(i).val <= ans.get(i-1).val){
                 return false;
             }

         }
        return true;

        
    }

   /**
   * 中序遍历
   */
    public void process(TreeNode root){
        if(root == null){
            return;
        }
        process(root.left);
        ans.add(root);
        process(root.right);
    }

二叉树专题

leetcode700. 二叉搜索树中的搜索

leetcode95–不同的二叉搜索树 I

leetcode–二叉搜索树中第K小的元素

力扣-根据前序和后序遍历构造二叉树

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

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

相关文章

Linux开发中的辅助工具

文章目录 前言一、add2line二、strip三、ar四、nm五、objdump六、size七、strings总结 前言 本篇文章我们来介绍一些Linux开发中的辅助工具&#xff0c;有了这些辅助工具将会让我们的开发变的更加轻松。 一、add2line addr2line是一个GNU调试工具&#xff0c;用于将程序计数…

priority_queue的模拟实现和仿函数

priority_queue模拟 首先查看源代码&#xff0c;源代码就在queue剩下的部分中 push_heap是STL库中的堆算法&#xff0c;STL库中包装有支持堆的算法&#xff0c;在algorithm.h中&#xff1a; 只要不断用堆的形式插入数据&#xff0c;就会形成堆。 priority_queue模拟——初版 pr…

自定义组件中,使用onLoad,onShow生命周期失效问题

的解决方法 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 官方文档可查阅到&#xff1a; 页面生命周期仅在page中的vue页面有效&#xff0c;而单独封装的组件中【页面周期无效】&#xff0c;但是Vu…

Pytorch入门(四)使用VGG16网络训练CIFAR10数据集

本文使用PytorchVGG16官方CIFAR10数据集完成图像分类。识别效果如下&#xff1a; 文章目录 一、VGG16 神经网络结构二、VGG16 模型训练三、预测CIFAR10中的是个类别 一、VGG16 神经网络结构 VGG&#xff0c;又叫VGG-16&#xff0c;顾名思义就是有16层&#xff0c;包括13个卷…

地震勘探基础(十)之地震速度关系

地震速度 地震勘探中引入了多种速度的概念&#xff0c;如下图所示。 层速度、平均速度和均方根速度之间的关系 层速度指的是某一套地层垂向上&#xff0c;由于地质条件相对稳定&#xff0c;地层顶底厚度比上地震波的传播时间为层速度&#xff0c;用 v n v_n vn​ 表示。 如下…

一文看懂软件架构4+1视图

目录 一、概述 二、各视图详解 1. 场景视图 2. 逻辑视图 3. 开发视图 4. 处理视图 5. 物理视图 葵花宝典&#xff1a;一看就懂的理解方式 一、概述 41视图包括&#xff1a; 场景视图&#xff08;也叫用例视图&#xff09;&#xff1a;黑盒视图。从外部视角&#xff…

chatgpt赋能python:Python如何分段数据的平均数

Python如何分段数据的平均数 Python是一门极其流行的编程语言&#xff0c;广泛应用于数据分析与科学计算领域。在数据分析中&#xff0c;计算各个数据段的平均数是一项常见的任务。本文将介绍如何使用Python分段计算数据的平均数&#xff0c;以及如何优化这一过程以使速度更快…

Linux中的lrzsz

一、介绍 lrzsz是一款在Linux里可代替ftp上传和下载的程序,也就是一款软件。它是开发者常用的一款工具,这个工具用于windows机器和远端的Linux机器通过XShell传输文件。 二、lrzsz的安装 在安装之前,我们可以使用下述命令先查看yum仓库中是否存在我们要安装的软件: yum…

CentOS7使用Docker快速安装Davinci

环境信息 操作系统&#xff1a;CentOS7Docker : 23.0.6 &#xff08;已配置阿里云镜像加速&#xff09; 安装步骤 安装docker-compose-plugin 官方的例子使用的是docker-compose&#xff0c;但是由于yum能够安装的最新斑斑是1.x,而且官方的docker-compose要求最低版本为2.2以…

首个区块链技术领域国家标准出台 ,中创助力打造区块链技术和应用创新高地

区块链作为数字中国的重要技术底座&#xff0c;正在深刻改变着我国社会生产方式。何谓区块链&#xff0c;对大众来说&#xff0c;也许尚陌生&#xff0c;殊不知&#xff0c;这一产业已稳稳起跑在我国高质量发展的“赛道”上。 近日&#xff0c;《区块链和分布式记账技术参考架…

【JavaScript】超全基础万字大总结

目录 一、初识 JavaScript 1.1 JavaScript 是什么&#xff1f; 1.2 发展历史 1.3 JavaScript 和 HTML 和 CSS 之间的关系 1.4 JavaScript 运行过程 1.5 JavaScript 的组成 二、前置知识 2.1 第一个程序 2.2 JavaScript 的书写形式 2.3 输入输出 三、语法概览 3.1 变…

Linux(CentOS 7) 安装 Mysql8 、Java 以及 mycat2 详细流程

目录 一、Mysql8 安装 1.下载mysql8 2. 解压Mysql 压缩包 3.重名命mysql 文件 4.创建data文件夹 储存文件 5.创建用户组以及用户 6.授权用户 将mysql文件夹的所有者和所有组都改为mysql 7.mysql初始化进入bin目录执行mysqld文件进行初始化 8.编辑my.cnf 9.添加mysqld…

有哪些虚拟化和容器化工具推荐? - 易智编译EaseEditing

以下是几个常用的虚拟化和容器化工具推荐&#xff1a; VMware vSphere&#xff1a; VMware vSphere 是一套完整的虚拟化平台&#xff0c;包括虚拟化服务器、虚拟化存储和虚拟化网络。 它提供了高性能的虚拟机管理和资源调度功能&#xff0c;适用于企业级的虚拟化部署。 Docke…

IT知识百科:什么是跨站脚本(XSS)攻击?

跨站脚本&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种常见的网络安全漏洞&#xff0c;攻击者利用该漏洞在受害者的网页中插入恶意脚本&#xff0c;从而能够获取用户的敏感信息、劫持会话或进行其他恶意活动。本文将详细介绍跨站脚本攻击的原理、类型、常…

vue props传值层级多,子级孙子级怎么修改传参

vue props传值层级多了&#xff0c;子级孙子级怎么修改传参 1.出现背景2.怎么在孙组件里改变传过来的值呢2.1这样改是不行的2.2可行的方法2.2.1 引用对象只改变单属性2.2.2 provide和inject 1.出现背景 本来自己写页面的话是直接全部写在一个vue文件里&#xff0c;一个vue文件…

【solidworks】此文档 templates\gba0.drwdot 使用字体长仿宋体,而该字体不可用

一、问题背景 在SolidWorks中绘制工程图纸时&#xff0c;新建一个图纸&#xff0c;打开后就弹出字体错误 此文档 templates\gba0.drwdot 使用字体长仿宋体&#xff0c;而该字体不可用。 二、解决办法 点击选择新的字体&#xff0c;拖到最下面选择汉仪长仿宋体。 上面之所…

41 管理虚拟机可维护性-虚拟机NMI Watchdog

文章目录 41 管理虚拟机可维护性-虚拟机NMI Watchdog41.1 概述41.2 注意事项41.3 操作步骤 41 管理虚拟机可维护性-虚拟机NMI Watchdog 41.1 概述 NMI Watchdog是一种用来检测Linux出现hardlockup&#xff08;硬死锁&#xff09;的机制。通过产生NMI不可屏蔽中断&#xff0c;…

win10+tf2.x+cuda+cudnn踩坑记录( Loaded cuDNN version 8400)

项目场景&#xff1a; 项目用到了tensorflow2.x&#xff1a; 想要用GPU跑算法win10系统下需要安装cuda和cudnn配置带有tenserflow-gpu的环境 问题描述 jyputer运行错误提示&#xff1a;Loaded cuDNN version 8400 Could not locate zlibwapi.dll. Please make sure it is in…

智安网络|保护企业网络空间资产安全的重要性

在数字化时代&#xff0c;企业网络空间资产的安全和保护变得越来越重要&#xff0c;并且拥有安全性能优越、系统完整的企业网络系统&#xff0c;是企业发展的必要条件。但想要实现网络空间安全首先需要关注网络漏洞问题。 保护企业网络空间资产的重要性 网络空间资产安全是企…

【深度学习】跌倒识别(带数据集和源码)从0到1,内含很多数据处理的坑点和技巧,收获满满

文章目录 前言1. 数据集1.1 数据初探1.2 数据处理1.3 训练前验证图片1.4 翻车教训和进阶知识 2. 训练3.效果展示 前言 又要到做跌倒识别了。 主流方案有两种&#xff1a; 1.基于关键点的识别&#xff0c;然后做业务判断&#xff0c;判断跌倒&#xff0c;用openpose可以做到。…