当前位置: 首页 > article >正文

力扣【98. 验证二叉搜索树】Java题解(容易写错的题)

二叉搜索树的中序遍历是有序数组(因为对于数组某个元素,左边是它的左子树而右边是它的右子树,显然二叉树搜索树左子树小于它,右子树大于它),所以可以直接中序遍历然后判断是否有序来判断是否是二叉搜索树。

但是在实际代码中,我们可以不用把元素保存在数组中,只需在每个节点遍历的时候和上一个节点的值比较即可。而这个过程需要设置一个全局变量,表示上一个节点的值,然后每次进行比较然后设置即可,而初始化则为Long.MIN_VALUE(因为测试用例中有int的最小值)

class Solution {
    long num = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if(find(root) == false) return false;
        return true;
    }
    public boolean find(TreeNode node){
        if(node == null) return true;
        if(find(node.left) == false) return false;
        if(num >= node.val) return false;
        num = node.val;
        return find(node.right);
    }
}

其实我们也可以直接保存上一个节点作为全局变量和当前节点进行比较,这样就不用担心类型数据范围的问题。变量初始化为null。

class Solution {
    TreeNode pre = null;
    public boolean isValidBST(TreeNode root) {
        return find(root);
    }
    public boolean find(TreeNode node){
        if(node == null) return true;
        if(find(node.left) == false) return false;
        if(pre != null && pre.val >= node.val) return false;
        pre = node;
        return find(node.right);
    }
}

http://www.kler.cn/a/526787.html

相关文章:

  • JVM_类的加载、链接、初始化、卸载、主动使用、被动使用
  • volatile
  • 《LLM大语言模型+RAG实战+Langchain+ChatGLM-4+Transformer》
  • ESP32-S3模组上跑通esp32-camera(39)
  • 我是如何写作的?
  • 【自学笔记】计算机网络的重点知识点-持续更新
  • Java小白入门教程:内置数据类型(四类八种)和引用数据类型
  • Java知识速记:深拷贝与浅拷贝
  • 基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)
  • LabVIEW透镜多参数自动检测系统
  • HTML DOM 修改 HTML 内容
  • SG算法解析
  • java_throw和throws的区别
  • 【OpenGL】OpenGL游戏案例(二)
  • Gurobi基础语法之打印模型
  • 本地部署 DeepSeek-R1 大模型实操
  • PHP中配置 variables_order详解
  • 爬虫基础(四)线程 和 进程 及相关知识点
  • 蓝桥杯例题五
  • 跨平台物联网漏洞挖掘算法评估框架设计与实现文献综述之GMN
  • doris:导入高可用性
  • 电脑要使用cuda需要进行什么配置
  • LitGPT - 20多个高性能LLM,具有预训练、微调和大规模部署的recipes
  • 电子电气架构 --- 在智能座舱基础上定义人机交互
  • 题单:冒泡排序1
  • Java根据端口范围关闭Appium服务