验证二叉搜索树

问题描述

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数;节点的右子树只包含大于当前节点的数;所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:

    2

   / \

  1   3

输出: true

示例 2:

输入:

    5

   / \

  1   4

     / \

    3   6

输出: false

解释: 输入为: [5,1,4,null,null,3,6]。

        根节点的值为 5 ,但是其右子节点值为 4 。

 

解法一(递归):

 看到这题我的第一反应肯定是递归:

复制代码
    public boolean isValidBST(TreeNode root) {
        //定义三个节点中、左、右
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean isValidBST(TreeNode root, long minVal, long maxVal) {
            if (root == null) return true;
            //不满足条件直接false
           if (root.val >= maxVal || root.val <= minVal) return false;
            //递归下一层
            return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);
    }
复制代码

解法二(递归):

复制代码
 //定义一个前驱节点
    TreeNode prev;
    //中序遍历思想
    public boolean isValidBST2(TreeNode root) {
        if (root == null) 
            return true;
        //遍历左子树
        if (!isValidBST2(root.left)) 
            return false;
        if (prev != null && prev.val >= root.val)
            return false;
        prev = root;
        //遍历右子树
        if (!isValidBST2(root.right))
            return false;
        return true;
    }
复制代码

解法三(迭代):

复制代码
    public boolean isValidBST1(TreeNode root) {
        //迭代的中序遍历
        if (root == null)return true;
        Stack<TreeNode> stack =new Stack<>();
        TreeNode pre = null;
        while (root != null||!stack.isEmpty()){
            while (root!=null){
                stack.add(root);
                root=root.left;
            }
            root=stack.pop();
            if (pre != null && prev.val >= root.val) return false;
            pre = root;
            root = root.right;
        }
        return true;
    }
复制代码

 

总结:

这题掌握中序遍历就很好做了,左子树小于根节点,右子树大于根节点。

 

posted @   泉水姐姐。  阅读(102)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示