「递归算法」:验证二叉搜索树

一、题目

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

二、思路解析

开始我先说这道题要用到的一条定理:二叉搜索树的中序遍历,其结果是一个递增序列

证明过于简单,画图即可,在此不做赘述。

二叉树的例题,我们都得先判断这棵树是否为空树,也就是 root 是否为 null ,是的话返回 true 即可,因为这也是符合题目要求的一颗二叉搜索树。

而具体的实现,就需要用到刚开头提到的定理,做一个中序遍历。

因此,首先递归调用函数本身,把 root. left 传过去。

注意这里可以做一个优化:定义一个布尔类型变量,用于接受我们刚刚的递归调用,如果返回的是 false ,那就证明他左子树中有元素大于根节点,不满足二叉搜索树的定义,直接 return 掉。

这步优化也就是所谓的 剪枝

按照中序遍历,接下来依次轮到根节点和右子树了,先定义一个 cur 节点来判断根节点是否大于其左子树的值,是的话返回 true ,反之亦然。

然后也是一步剪枝操作来优化。

这里有一个小细节, “左子树的值” 我在开始的时候定义成了全局变量,省去了每一次递归都要传值的繁琐。

最后就是右子树的遍历了,同样也是递归调用函数本身,跟左子树区别仅在于传值的不同。

具体实现请看下面代码👇

三、完整代码

/*** 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 {long prev = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null){return true;}boolean left = isValidBST(root.left);// 剪枝            if(left == false){return false;}boolean cur = false;if(root.val > prev){cur = true;}// 剪枝if(cur == false){return false;}        prev = root.val;boolean right = isValidBST(root.right);return left && cur && right;}
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

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

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

相关文章

三层交换组网实验(思科)

一&#xff0c;技术简介 三层交换技术的出现&#xff0c;解决子网必须依赖路由器进行管理的问题&#xff0c;解决传统路由器低速、复杂所造成的网络瓶颈问题。一个具有三层交换功能的设备可简单理解为&#xff1a;一个带有第三层路由功能的第二层交换机。 二&#xff0c;实验目…

特种作业题不会怎么搜答案?推荐你使用这六个公众号和工具 #其他#学习方法特种作业题不会怎么搜答案?推荐你使用这六个公众号和工具 #其他#学习方法

作为当代大学生&#xff0c;我们常常面临着繁重的学业压力和众多的学习任务。在这个信息爆炸的时代&#xff0c;如何高效地进行搜题和学习成了我们迫切需要解决的问题。幸运的是&#xff0c;随着科技的不断进步&#xff0c;我们拥有了许多方便、实用的日常搜题和学习软件。 1.…

【漏洞库】O2OA系统

O2OA invoke 后台远程命令执行漏洞 CNVD-2020-18740 漏洞描述 O2OA是一款开源免费的企业及团队办公平台&#xff0c;提供门户管理、流程管理、信息管理、数据管理四大平台,集工作汇报、项目协作、移动OA、文档分享、流程审批、数据协作等众多功能&#xff0c;满足企业各类管理…

路由引入路由过滤

目录 路由引入 什么是路由引入&#xff1f; 为什么需要路由引入&#xff1f; 路由引入的规划分为两种 路由过滤 路由过滤的工具 前缀列表格式 filter-policy router-policy 路由引入 什么是路由引入&#xff1f; 将一种协议导入到另一种协议或在同种协议的不同进程…

Methyltetrazine-PEG4-azide,甲基四嗪PEG4叠氮,具有高反应活性

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Methyltetrazine-PEG4-azide&#xff0c;Methyltetrazine-PEG4-N3&#xff0c;N3-PEG4-Methyltetrazine&#xff0c;甲基四嗪-四聚乙二醇-叠氮&#xff0c;甲基四嗪PEG4叠氮&#xff0c;叠氮PEG4甲基四嗪 一、基本信…

【从0上手Cornerstone3D】如何使用CornerstoneTools中的工具之工具介绍

简单介绍一下在Cornerstone中什么是工具&#xff0c;工具是一个未实例化的类&#xff0c;它至少实现了BaseTool接口。 如果我们想要在我们的代码中使用一个工具&#xff0c;则必须实现以下两个步骤&#xff1a; 使用Cornerstone的顶层addTool函数添加未实例化的工具 将工具添…

基于python+控制台的员工信息管理系统

基于python控制台的员工信息管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 1.添加职工数据 2.显示职工数据 3.查询职工数据 4.修改职工数据 5.删除职工数据 6.保存职工数据 7.排序职工数据 8.统计职工工资数据 9.退出 二、效果展示 三、其他系…

【数据结构】----先来聊聊【排序】(先导片)

作为一名对技术充满热情的学习者&#xff0c;我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代&#xff0c;我远非专家&#xff0c;而是一位不断追求进步的旅行者。通过这篇博客&#xff0c;我想分享我在某个领域的学习经验&#xff0c;与大家共同探讨、共…

设置Nginx进程最大可打开文件数

打开nginx.conf主配置文件。您需要配合worker_rlimit_nofile属性。如下&#xff1a; user root root; worker_processes 4; worker_rlimit_nofile 65535;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid; …

哪些因素会限制带宽的可用性?

当我们讨论带宽的可用性时&#xff0c;我们主要关注的是数据传输的速度和容量。带宽就像一条公路&#xff0c;数据就像行驶在公路上的车辆&#xff0c;带宽越大&#xff0c;可以同时传输的数据就越多&#xff0c;数据传输的速度也就越快。但是&#xff0c;就像公路会有各种限制…

JupyterLab 更换内核 使用 conda 虚拟环境

未有conda虚拟环境default先创建环境 conda create -n default python3.8 ipykernel已有conda虚拟环境default激活后安装ipykernel conda activate defaultpip install ipykernel将虚拟环境写入 jupyter notebook 的 kernel 中 python -m ipykernel install --user --name 虚…

深度神经网络如何启用卤化物后端以提高效率

介绍 本教程指导如何使用 Halide 语言后端在 OpenCV 深度学习模块中运行模型。Halide 是一个开源项目&#xff0c;它让我们以可读性强的格式编写图像处理算法&#xff0c;根据特定设备安排计算并以相当高的效率对其进行评估。 卤化物项目的官方网站&#xff1a;Halide。 最新…