【LeetCode】No.98. Validate Binary Search Tree -- Java Version

news2025/2/24 8:49:45

题目链接:https://leetcode.com/problems/validate-binary-search-tree/

1. 题目介绍(Validate Binary Search Tree)

Given the root of a binary tree, determine if it is a valid binary search tree (BST).

【Translate】: 给定二叉树的根,确定它是否是有效的二叉搜索树(BST)。

A valid BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than the node’s key.
  • Both the left and right subtrees must also be binary search trees.

【Translate】: 有效的BST定义如下:

  • 节点的左子树只包含键值小于该节点键值的节点。
  • 节点的右子树只包含键值大于该节点键值的节点。
  • 左子树和右子树都必须是二叉搜索树。

【测试用例】:
tesecase1
tesecase2

【条件约束】:

Constraints

2. 题解

2.1 中序遍历栈

原题解来自于 issac3 的 Learn one iterative inorder traversal, apply it to multiple tree questions (Java Solution).

该题解的做法和 【LeetCode】No.94. Binary Tree Inorder Traversal – Java Version中实现中序遍历的代码基本一致,不同点是在于多了一个前后节点大小比较的过程。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isValidBST(TreeNode root) {
       if (root == null) return true;
       Stack<TreeNode> stack = new Stack<>();
       TreeNode pre = null;
       while (root != null || !stack.isEmpty()) {
          while (root != null) {
             stack.push(root);
             root = root.left;
          }
          root = stack.pop();
          if(pre != null && root.val <= pre.val) return false;
          pre = root;
          root = root.right;
       }
       return true;       
    }     
}

act1

2.2 递归

原题解来自于 sruzic 的 My simple Java solution in 3 lines.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }
    
    public boolean isValidBST(TreeNode root, long minVal, long maxVal) {
        if (root == null) return true;
        if (root.val >= maxVal || root.val <= minVal) return false;
        return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);
    } 
}

act2

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

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

相关文章

Qt 堆栈窗体QStackedWidget使用

QStackedWidget控件相当于一个容器&#xff0c;提供一个空间来存放一系列的控件&#xff0c;并且每次只能有一个控件是可见的&#xff0c;即被设置为当前的控件。QStackedWidget可用于创建类似于QTabWidget提供的用户界面。 它是一个构建在QStackedLayout类之上的方便布局小部件…

dolphinscheduler 2.0.6 负载均衡源码

目录&#x1f42c;官网介绍&#x1f42c;负载均衡&#x1f420;加权随机&#xff08;random&#xff09;&#x1f420;平滑轮询&#xff08;roundrobin&#xff09;&#x1f420;线性负载&#xff08;lowerweight&#xff09;&#x1f435;其它&#x1f42c;官网介绍 官网资料&…

【计算机网络】网络层:虚拟专用网

由于IP地址的紧缺&#xff0c;一个机构能够申请到的IP地址数往往远小于本机构拥有的主机数。 如果一个机构内部的计算机通信也采用TCP/IP协议&#xff0c;那么这些仅字机构内部使用的计算机就可以由本机构自行分配其IP地址。 本地地址&#xff08;专用地址&#xff0c;互联网对…

Java培训教程给bean的属性赋值

依赖注入的方式 1. 通过bean的setXxx()方法赋值 Hello World中使用的就是这种方式 2. 通过bean的构造器赋值 Spring自动匹配合适的构造器<bean id“book” class“com.atguigu.spring.bean.Book” > <constructor-arg value “10010”/> …

有位p8终于把珍藏多年的算法视频给分享出来了,总共3.81G

大厂面试都开始问算法了&#xff0c;要是你不会算法只能与大厂失之交臂。为了解决大家算法方面的缺失&#xff0c;小编特此分享算法的学习路线和学习视频&#xff0c;希望大家能够喜欢&#xff01;&#xff01;&#xff01; 左神算法-KMP算法及其扩展 左神算法-Morris遍历及其…

S2B2C供应链系统将引领商业模式!S2B2C供应链电商系统实现订单管理数智化

近年来随着5G、人工智能、区块链、大数据、物联网等技术的快速发展&#xff0c;带动了数字经济的升级发展&#xff0c;疫情的不断反复更是加速推动了数字经济新发展&#xff0c;产业数字化和数字产业化进程加快&#xff0c;促进了各行各业快速发展&#xff0c;S2B2C供应链系统模…

17【redux】

17 【redux】 引言 我们现在开始学习了 Redux &#xff0c;在我们之前写的案例当中&#xff0c;我们对于状态的管理&#xff0c;都是通过 state 来实现的&#xff0c;比如&#xff0c;我们在给兄弟组件传递数据时&#xff0c;需要先将数据传递给父组件&#xff0c;再由父组件…

[附源码]Python计算机毕业设计大学生志愿者管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

软件工程经济学期末复习

1、利润 收入-成本费用 2、资产 流动资产非流动资产 3、显性成本可以用货币计量&#xff0c;是可以在会计的帐目上反映出来的 4、领取什么保险应缴纳个人所得税 商业保险 某企业一项固定资产的原价为800 0000元&#xff0c;预计使用年限为6年&#xff0c;预计净残值为5 0…

软件测试linux面试相关的知识

一、常用的命令 ls&#xff08;查看目录下的内容&#xff0c;-a显示隐藏目录&#xff09; cd&#xff08;进入某个目录&#xff0c;cd .. 返回上一层目录&#xff0c;cd - 返回上一次的目录&#xff0c;cd / 返回根目录&#xff09; pwd&#xff08;显示当前绝对路径&#x…

阿里云易立:以增效促降本,容器服务全面进入智能化时代

容器技术已经跨越鸿沟&#xff0c;广泛应用于金融、通讯、制造、交通等千行百业。Kubernetes支撑的工作负载也从早期单一的互联网应用发展到数据库、AI、大数据等等&#xff0c;并覆盖了公共云、专有云、边缘云等多样化、动态的云环境。 11月5日&#xff0c;2022杭州 云栖大会…

在Windows7在部署Hadoop+Hbase

0. 准备工作 0.1 电脑上现在没有jdk 0.1 提前准备好文件 1. 现在开始安装jdk 1.8.0_60 安装成功&#xff0c;没啥问题 小疑问&#xff1a;自动配置好了环境变量? 1.1 小记 在安装jdk的时候&#xff0c;有三种小工具&#xff0c;可以根据需要选择性安装 JDKjre源代码 虽…

牛客网语法篇练习基础语法(二)

1.牛牛正在给他的朋友们买电影票&#xff0c;已知一张电影票价是100元&#xff0c;计算 x 位朋友的总票价是多少&#xff1f; x int(input()) a x*100 print(a) 2.给定两个整数a和b (0 < a,b < 10,000)&#xff0c;计算a除以b的整数商和余数。 a,b map(int,input().…

【深入浅出Java并发编程指南】「剖析篇」Fork/Join框架的实战开发和原理探究指南

前提概述 Java 7开始引入了一种新的Fork/Join线程池&#xff0c;它可以执行一种特殊的任务&#xff1a;把一个大任务拆成多个小任务并行执行。 我们举个例子&#xff1a;如果要计算一个超大数组的和&#xff0c;最简单的做法是用一个循环在一个线程内完成&#xff1a; 算法原理…

使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片

Typora下载 Typora以前都是免费的&#xff0c;自去年开始竟然要收费&#x1f914;&#xff08;不过也能理解&#xff0c;毕竟真心好用&#x1f60a;&#xff09;&#xff0c;在这里给大家提供的是免费的版本&#xff08;免安装&#xff0c;下载即可使用&#xff09;&#xff0…

【密码学篇】(商密)密码算法分析理论知识

【密码学篇】&#xff08;商密&#xff09;密码算法分析理论知识 密码算法分析理论—【蘇小沐】 文章目录【密码学篇】&#xff08;商密&#xff09;密码算法分析理论知识&#xff08;一&#xff09;密码系统安全性1.实际安全性2.无条件安全性&#xff08;二&#xff09;密码算…

干货丨如何开启TiDB集群中的节点通信加密?

笔者在一个银行项目中&#xff0c;费尽千辛万苦&#xff0c;好不容易通过PoC测试。 就当一切就绪&#xff0c;准备正式上线时&#xff0c;突然传来了噩耗&#xff1a;未通过银行内部的漏洞扫描&#xff0c;发现存在高危漏洞&#xff0c;需要马上进行修复。 这可给我吓坏了&am…

Vue-axios的get、post请求

直接在控制台上打印axios会报错&#xff0c;打印fetch就不会&#xff1b; 因为fetch是标准&#xff0c;axios是第三方&#xff0c;要想用axios&#xff0c;就必须引入想应的js文件&#xff1b;axios-js文件下载&#xff1a;npm 搜索axios&#xff0c;点进去&#xff0c;往下找&…

智云通CRM:如何清除销售前被拒绝的怀疑和猜测?

在做CRM销售时&#xff0c;经常遇到被客户拒绝的情况&#xff0c;没有人喜欢被拒绝&#xff0c;因为拒绝辉让人痛苦、难过&#xff0c;但现实中又无法避免被拒绝&#xff0c;尤其是销售人员&#xff0c;对销售人员来说&#xff0c;被拒绝是家常便饭。遭到拒绝后&#xff0c;经常…

基于51单片机pwm调光护眼台灯智能检测光强光控灯设计proteus仿真原理图PCB

功能&#xff1a; 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/模式/亮度等级 2.按’切换’键可切换四种不同的模式 a) 自动开关&#xff0c;自动调节亮度 b) 手动开关&#xff0c;自动调节亮度 c) 自动开关&#xff0c;手动调节亮度 d) 手动开关&#xff0…