力扣98 验证二叉搜索树 java实现

  1. 验证二叉搜索树

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

二叉搜索树的中序遍历(左 中 右)正好是按从小到大排的,所以用中序遍历来解决该题较容易。

用递归来只需要记录前一个元素,然后按左 中 右递归即可。

java 复制代码
public class hot {
    public static void main(String[] args) {  // 测试用
        TreeNode treeNode1 = new TreeNode(2);
        treeNode1.left = new TreeNode(1);
        treeNode1.right = new TreeNode(3);
        hot hot = new hot();
        System.out.println(hot.isValidBST(treeNode1));
    }

    long pre = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if(root.left == null && root.right == null){
            return true;
        }
        boolean res = dfs(root);
        return res;
    }

    public  boolean dfs(TreeNode root){
        if (root == null){
            return true;
        }
        if (!dfs(root.left)){ // 左
            return false;
        }
        if (root.val <= pre){ // 中
            return false;
        }
        pre = root.val;      // 记录前一个值
        if (!dfs(root.right)){ // 右
            return false;
        }
        return true;
    }
}

以上为记录分享用,代码较差请见谅

相关推荐
微尘hjx2 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
云和数据.ChenGuang2 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠3 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
路灯上の马陈4 小时前
二叉树的定义与性质
数据结构·二叉树·树结构·1024程序员节
silvamux_5 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
步行cgn6 小时前
StringHttpMessageConverter 详解:Spring MVC 中字符串读写的默认转换器
java·spring·mvc
摇滚侠6 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
小蒜学长6 小时前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
Deng桑6 小时前
SpringAI写第一个Agent-把工单循环跑起来
java·agent·工具调用·spring ai