Java算法_ 验证二叉搜索树(LeetCode_Hot100)

题目描述:
给你一个二叉树的根节点 ,判断其是否是一个有效的二叉搜索树。root 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。

获得更多?算法思路:代码文档,算法解析的私得。
一个有效的二叉搜索树(BST)要求对于每个节点,其左子树中的所有节点值都要小于当前节点值,而其右子树中的所有节点值都要大于当前节点值。同时,还要确保每个子树自身也是一个有效的二叉搜索树。
基于这个思想,我们可以采用递归的方式来判断一个二叉树是否是有效的二叉搜索树。对于每个节点,我们可以限定一个上下界,保证其左子树的所有节点值都在这个上下界内,而右子树的所有节点值都在另一个上下界内。
具体步骤如下:

  1. 初始化递归函数,传入当前节点、左界限和右界限。
  2. 如果当前节点为空,直接返回 true。
  3. 如果当前节点值不在左界限和右界限范围内,返回 false。
  4. 对左子树递归调用,左界限不变,右界限变为当前节点值。
  5. 对右子树递归调用,左界限变为当前节点值,右界限不变。
  6. 如果左子树和右子树都返回 true,则说明当前节点及其子树是有效的二叉搜索树。
    这个过程递归地向下进行,最终判断整棵树是否是有效的二叉搜索树。

运行效果
在这里插入图片描述

完整代码

/*** 2 * @Author: LJJ* 3 * @Date: 2023/8/18 13:32* 4*/
public class ValidateBST {static class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(int val){this.val = val;}}// 主函数,判断给定二叉树是否为有效二叉搜索树public boolean isValidBST(TreeNode root){// 调用递归函数,初始值不限定上界和下界return isValidBST(root,null,null);}// 递归函数,判断以当前节点为根的子树是否为有效的二叉搜索树private boolean isValidBST(TreeNode node, Integer lower, Integer upper){// 递归终止条件,如果当前节点为空,说明子树是一个有效的二叉搜索树if (node == null){return true;}int val = node.val;// 检查当前结点的是否在合适的范围内if (lower != null && val <= lower){return false;}if (upper != null && val >= upper){return false;}// 递归判断左子树和右子树是否是有效的二叉搜索树// 对于左子树,当前节点的值成为上界;对于右子树,当前节点的值成为下界return isValidBST(node.left,lower,val) && isValidBST(node.right,val,upper);}public static void main(String[] args) {ValidateBST validateBST = new ValidateBST();// 创建示例二叉树TreeNode root = new TreeNode(5);root.left = new TreeNode(2);root.right = new TreeNode(7);root.left.left = new TreeNode(1);root.left.right = new TreeNode(3);root.right.left = new TreeNode(6);root.right.right = new TreeNode(8);// 调用验证函数并输出结果boolean isValid = validateBST.isValidBST(root);System.out.println("是否为二叉搜索树? " + isValid); // 输出 true}
}

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

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

相关文章

【TypeScript】tsc -v 报错 —— 在此系统上禁止运行脚本

在 VS Code 终端中执行 tsc -v &#xff0c;报错 —— 在此系统上禁止运行脚本 然后 windows x &#xff0c;打开终端管理员&#xff0c;出现同样的问题 解决方法&#xff1a; 终端&#xff08;管理员&#xff09;执行以下命令&#xff1a; 出现 RemoteSigned 则代表更改成功…

11,模板泛化、模板特化、所占字节数、继承实现模板展开、using循环命名展开可变参数

模板泛化、模板特化、所占字节数、继承实现模板展开、using循环命名展开可变参数 模板泛化模板特化模板全特化通过模板偏特化获取类型所占字节数通过模板偏特化和宏获取类型所占字节数...ParamTypes和ParamTypes...的区别 通过继承实现模板展开using 通过using循环命名的方式来…

开发一个文生图的功能

文章目录 效果开发环境原理核心代码代码仓库问题效果 开发环境 Python 3.10PyCharm原理 借助开源项目stable-diffusion,通过该项目封装python库diffusers,可以轻易的实现文生图的功能。 关于更多diffusers的功能请访问:https://huggingface.co/docs/diffusers/index 核心代…

css样式表属性

文章目录 css样式表属性colorbackground-colorfont-sizefont-weightfont-familyfont-styletext-decorationtext-indentline-height(line-height的概念)width、heightletter-spacingtext-aligndirectionwriting-modefont-variantborder-radiusopacitycursorvertical-alignmin-wi…

【数据结构与算法】十大经典排序算法-归并排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

如何用输入函数为数组赋值

在编写程序时我们经常使用数组&#xff0c;而数组的大小可能是很大的但是我们并不需要为每个元素都自己赋值&#xff0c;我们可能会自定义输入数组元素个数&#xff0c;我们应该如何实现通过输入函数为数组赋值呢&#xff1f; 目录 第一种&#xff1a; 第二种&#xff1a; 第一…

大数据bug-sqoop(二:sqoop同步mysql数据到hive进行字段限制。)

一&#xff1a;sqoop脚本解析。 #&#xff01;/bin/sh mysqlHost$1 mysqlUserName$2 mysqlUserPass$3 mysqlDbName$4 sql$5 split$6 target$7 hiveDbName$8 hiveTbName$9 partFieldName${10} inputDate${11}echo ${mysqlHost} echo ${mysqlUserName} echo ${mysqlUserPass} ec…

OpenCV之remap的使用

OpenCV中使用remap实现图像的重映射。 重映射是指将图像中的某一像素值赋值到指定位置的操作&#xff1a;g(x,y) f ( h(x,y) )&#xff0c; 在这里&#xff0c; g( ) 是目标图像, f() 是源图像, 而h(x,y) 是作用于 (x,y) 的映射方法函数。为了完成映射过程, 需要获得一些插值为…

TypeError: a bytes-like object is required, not ‘str‘

raceback (most recent call last): File "D:\pycharmcode\client.py", line 12, in <module> tcp_socket.send(send_data) TypeError: a bytes-like object is required, not str 使用socket进行ubuntu与windows通信时&#xff0c;发送数据时报了以上错…

LeetCode 面试题 01.04. 回文排列

文章目录 一、题目二、C# 题解 一、题目 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 点击此处跳转题目。 示例1&#xff1a; 输入&…

CSS3:图片边框

简介 图片也可以作为边框&#xff0c;以下是实例演示 注意 实现该效果必须添加border样式&#xff0c;且必须位于border-image-socure之前否则不会生效 实例 <html lang"en"><head><style>p {width: 600px;margin: 200px auto;border: 30px soli…

maven工具-maven的使用-镜像仓库、本地仓、IDEA使用maven

Maven 一、为什么使用maven 添加第三方jar包jar包之间的依赖关系处理jar包之间的冲突获取第三方jar包将项目拆分成多个工程模块实现项目的分布式部署 二、maven简介 ​ Maven项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的…

2023.8 - java - 对象和类

public class Dog {String breed;int size;String colour;int age;void eat() {}void run() {}void sleep(){}void name(){} } 一个类可以包含以下类型变量&#xff1a; 局部变量&#xff1a;在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方…

基于STM32标准库智能风扇设计

目录 一&#xff0c;前言 二&#xff0c;系统方案选择 三&#xff0c;实体展示 工程分类 四&#xff0c;相关代码 PWM.c PWM.h AD.c AD.h 电机驱动程序 舵机驱动 一&#xff0c;前言 当今生活中&#xff0c;风扇已成为人们解暑的重要工具&#xff0c;然而使用风扇缓解…

CentOS系统环境搭建(九)——centos系统下使用docker部署项目

centos系统环境搭建专栏&#x1f517;点击跳转 关于Docker-compose安装请看CentOS系统环境搭建&#xff08;三&#xff09;——Centos7安装Docker&Docker Compose&#xff0c;该文章同样收录于centos系统环境搭建专栏。 Centos7部署项目 采用前后端分离的形式部署。使用Do…

【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 随机梯度下降(Stochastic Gradient Descent,SGD)是一种优化算法,用于训练模型的参数以最小化损失函数。在分…

QT学习笔记-QT5.15编译及安装谷歌拼音输入法(QtInputMethod_GooglePinyin)

QT学习笔记-QT5.15编译及安装谷歌拼音输入法&#xff08;QtInputMethod_GooglePinyin&#xff09; 0、背景1、环境2、下载QtInputMethod_GooglePinyin源码3、使用MinGW64构建套件编译3.1 编译QtInputMethod_GooglePinyin源码3.2、部署tgtsmlInputContextPlugin输入法插件3.3、运…

Lombok注解在JSON化中,JSON生成额外生成字段问题

问题描述&#xff1a; 定义如下对象 Dataclass A{private String A;public String getC() {return "abab";}} 执行如下逻辑 Autowiredprivate ObjectMapper objectMapper;Testpublic void test4() throws Exception {A a new A();a.setA("a");System.ou…

分布式 - 服务器Nginx:一小时入门系列之负载均衡

文章目录 1. 负载均衡2. 负载均衡策略1. 轮询策略2. 最小连接策略3. IP 哈希策略4. 哈希策略5. 加权轮询策略 1. 负载均衡 跨多个应用程序实例的负载平衡是一种常用技术&#xff0c;用于优化资源利用率、最大化吞吐量、减少延迟和确保容错配置。‎使用 nginx 作为非常有效的HT…

【MySQL】如何使用Shared-memory协议(Windows)连接MySQL数据库

文章目录 【MySQL】如何使用Shared-memory协议(Windows)连接MySQL数据库连接MySQL的协议使用Shared-memory协议(Windows)连接MySQL步骤1&#xff1a;确认MySQL服务器已启用Shared-memory连接启动Shared-memory连接方法 步骤2&#xff1a;客户端使用shared-memory连接MySQL服务器…