美文网首页算法
LeetCode98.验证二叉搜索树

LeetCode98.验证二叉搜索树

作者: Timmy_zzh | 来源:发表于2021-09-20 10:31 被阅读0次
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
2.解题思路:
  • 先遍历左右子树,每棵子树遍历后得到当前子树的最大最小值和是否是bst的标识结果
    • 得到左右子树的结果后,与当前跟节点的值进行比较,是bst要求 根节点值 大于左子树的最大值
      且根节点值小于右子树的最小值
    • 两棵子树可以分别判断,先判断左子树是否为空,不为空判断左子树是否是bst,或者左子树最大值是否比根节点值小
    • 右子树也一样判断,不过是判断右子树最小值是否比根节点值大
      两棵子树与根节点的值都ok的话,则说明根节点子树是bst,并返回当前根节点子树的最大最小值
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        Result res = isValidBstPost(root);
        System.out.println(res.toString());
        return res.isBst;
    }

    private Result isValidBstPost(TreeNode root) {
        if (root == null) {
            return null;
        }
        Result leftRes = isValidBstPost(root.left);
        Result rightRes = isValidBstPost(root.right);
        /**
         * 情况1:两棵子树都为空,
         * 情况2:两棵子树其中一棵为空
         * 情况3:两颗子树都不为空
         */
        //分别判断左右子树与根节点值的大小,不是bst直接返回false
        if (leftRes != null && (!leftRes.isBst || leftRes.max >= root.val)) {
            return new Result(Integer.MIN_VALUE, Integer.MAX_VALUE, false);
        }
        if (rightRes != null && (!rightRes.isBst || root.val >= rightRes.min)) {
            return new Result(Integer.MIN_VALUE, Integer.MAX_VALUE, false);
        }

        int nMin = leftRes == null ? root.val : leftRes.min;
        int nMax = rightRes == null ? root.val : rightRes.max;

        return new Result(nMin, nMax, true);
    }

    private static class Result {
        public int min;
        public int max;
        public boolean isBst;

        public Result(int min, int max, boolean isBst) {
            this.min = min;
            this.max = max;
            this.isBst = isBst;
        }
    }
3.总结
  • 题解总结
    • 二叉搜索树bst,采用递归方式后序遍历,先判断左右子树是否是一棵二叉树,并获取到左右子树的最大最小值
    • 然后再与当前根结点值进行判断当前子树是否是一棵二叉搜索树

相关文章

  • leetcode98.验证二叉搜索树

    题目链接 题目描述: 思路一:根据二叉搜索树的特性进行中序遍历 二分搜索树指的是,对于任意一个非叶节点都有:nod...

  • LeetCode98.验证二叉搜索树

    1.题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点...

  • Swift 验证二叉搜索树- LeetCode

    题目: 验证二叉搜索树 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有...

  • LeetCode-98-验证二叉搜索树

    LeetCode-98-验证二叉搜索树 98. 验证二叉搜索树[https://leetcode-cn.com/p...

  • [LeetCode OJ]- Valid Binary Sea

    题目要求:验证一个树是否为二叉搜索树。 二叉搜索树:(BST,二叉排序树,二叉查找树)。 一颗二叉检索树或者为空树...

  • [Leetcode] 98. 验证二叉搜索树

    98. 验证二叉搜索树 来源: 98. 验证二叉搜索树 1. 题目描述 给定一个二叉树,判断其是否是一个有效的二...

  • LeetCode 98. 验证二叉搜索树

    98. 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点...

  • LeetCode 验证二叉搜索树

    98、验证二叉搜索树参考给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点...

  • 2019 算法面试相关(leetcode)--树、二叉树、二叉搜

    翻转二叉树二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历验证二叉搜索树二叉树的最近公共祖先二叉搜索树的最近公共祖...

  • 【算法】验证二叉搜索树

    验证二叉搜索树 描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子...

网友评论

    本文标题:LeetCode98.验证二叉搜索树

    本文链接:https://www.haomeiwen.com/subject/ulmmgltx.html