LeetCode第98题 - 有效的括号

题目

解答

方案一

java 复制代码
class Solution {
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }

        if (root.left == null && root.right == null) {
            return true;
        }

        if (root.left != null && root.left.val >= root.val) {
            return false;
        }

        if (root.right != null && root.right.val <= root.val) {
            return false;
        }

        return isValidBST(root.left) && isValidBST(root.right);
    }
}

方案二

java 复制代码
class Solution {
    public boolean isValidBST(TreeNode root) {
        return validate(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean validate(TreeNode node, long min, long max) {
        if (node == null) {
            return true;
        }
        if (node.val <= min || node.val >= max) {
            return false;
        }
        return  validate(node.left, min, node.val) && validate(node.right, node.val, max);
    }
}

要点

二叉搜索树中的任意节点,均满足如下条件:

  1. 节点的左子树只包含小于当前节点的数。
  2. 节点的右子树只包含大于当前节点的数。
  3. 所有左子树和右子树自身必须也是二叉搜索树。

粗看上去,方案一似乎可以满足要求,但实际上并不是,方案一没有完整验证1和2两个条件。

另外从代码量的规模看,方案二用较少的代码量,完成了更多的特性,更加优雅。

相关推荐
ZHE|张恒25 分钟前
Spring Bean 生命周期
java·spring
q***38512 小时前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
小白学大数据3 小时前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
程序员西西3 小时前
SpringBoot接口安全:APIKey保护指南
java·spring boot·计算机·程序员·编程·编程开发
summer_west_fish4 小时前
单体VS微服务:架构选择实战指南
java·微服务·架构
v***8574 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
烤麻辣烫4 小时前
黑马程序员大事件后端概览(表现效果升级版)
java·开发语言·学习·spring·intellij-idea
q***96584 小时前
Spring总结(上)
java·spring·rpc
思密吗喽4 小时前
宠物商城系统
java·开发语言·vue·毕业设计·springboot·课程设计·宠物
ss2734 小时前
019:深入解析可重入互斥锁:原理、实现与线程安全实践
java·数据库·redis