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

news/2024/11/24 2:14:24/

验证二叉搜索树

  • 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 ,nullreturn 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;}//左树上的任何值 不能大于头节点的值,因此最大值传rootboolean isLeft = process1(root.left,min,root);//右树上的任何值 不能小于头节点的值,因此最小值传rootboolean 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.ppmy.cn/news/224696.html

相关文章

南山村又一个旧改项目即将开工建设,桂庙新村城市更新单元。

5月22日&#xff0c;深圳市南山区城市更新和土地整备局发布关于粤海街道桂庙新村城市更新单元项目实施主体确认的公示。 根据公告&#xff0c;该项目实施方式为与权利主体签订搬迁补偿协议&#xff0c;补偿方式为产权置换和货币补偿相结合&#xff0c;已完成100%签约&#xff0…

Nginx配置域名证书

Nginx配置域名证书 1、证书存放路径 2、nginx.conf文件中增加以下配置&#xff0c;注意路径不一样&#xff0c;访问地址目录不一样 server {listen 443 ssl http2;server_name jistest.vwatj.ap.vwg;ssl_certificate D:/home/XXX/ssl/2023/XXX.cer; ssl_certificate_key D…

js连接蓝牙打印机打印一维码和二维码

JavaScript使用原生JS&#xff08;native.JS&#xff09;连接蓝牙打印机&#xff0c;打印一维码、二维码 使用说明: 代码已经过测试&#xff0c;可正常使用测试蓝牙打印机为 商米&#xff08;SUNMI&#xff09;V2S plus打印机&#xff0c;此设备为一体机&#xff0c;与PDA连接…

打印机共享怎么设置?如何设置打印机共享?

打印机共享怎么设置&#xff1f;如何设置打印机共享&#xff1f; 想要让两台打印机或者是多台打印机可以同时使用&#xff0c;首先要了解如何设置并共享局域网内已连接好电脑的打印机&#xff0c;之后需要解决的是局域网内其它电脑如何找到刚才那台电脑共享出去的打印机&#…

Deepin Linux系统怎安装打印机? 兄弟1618w打印机驱动安装图文教程

Deepin系统作为国产的一款电脑操作系统&#xff0c;拥有极为非常美观的UI界面。很多不熟悉该操作系统的朋友都不知道该怎么安装打印机驱动&#xff0c;今天我们就以兄弟1618w打印机为例&#xff0c;分享驱动下载&#xff0c;安装&#xff0c;调试的过程。 电脑环境和打印机型号…

win7或win10系统的打印机共享设置步骤

打印机共享怎么设置&#xff1f;如何设置打印机共享&#xff1f;要实现两台打印机或者是多台打印机共享&#xff0c;首先要了解如何设置并共享局域网内已连接好电脑的打印机&#xff0c;之后需要解决的是局域网内其它电脑如何找到刚才那台电脑共享出去的打印机&#xff0c;并且…

win10 链接github

https://github.com.ipaddress.com/ 在链接里面找到ip 打开系统host文件 Windows 系统&#xff1a;C:\Windows\System32\drivers\etc\hosts Linux 系统&#xff1a;/etc/hosts Mac&#xff08;苹果电脑&#xff09;系统&#xff1a;/etc/hosts Android&#xff08;安卓&#x…

外贸人注意!这件事不能再对客户承诺了!

你还在配合客户低开发票吗&#xff1f; 本文目录&#xff1a; 什么是低开发票&#xff1f; 低开发票有什么风险&#xff1f; 哪些国家客户喜欢低开发票&#xff1f; 哪些国家低开发票会被抓&#xff1f; 很多人认为客户索要低开发票偷税漏税是人之常情。为了加强合作关系&a…