Day48 验证二叉搜索树

作者: Shimmer_ | 来源:发表于2021-03-15 09:41 被阅读0次

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

https://leetcode-cn.com/problems/validate-binary-search-tree/

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。

节点的右子树只包含大于当前节点的数。

所有左子树和右子树自身必须也是二叉搜索树。

示例1:

输入:
2
/
1 3
输出: true

示例2:

输入:
5
/
1 4
/
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。

Java解法

思路:

  • 二叉搜索树每个节点具有共性,因此可以考虑使用递归处理
package sj.shimmer.algorithm.y2021;

import sj.shimmer.algorithm.TreeNode;

/**
 * Created by SJ on 2021/3/14.
 */

class D48 {
    public static void main(String[] args) {
        TreeNode n6 = new TreeNode(6,null,null);
        TreeNode n3 = new TreeNode(3,null,null);
        TreeNode n4 = new TreeNode(4,n3,n6);
        TreeNode n1 = new TreeNode(1,null,null);
        TreeNode n5 = new TreeNode(5,n1,n4);
        System.out.println(isValidBST(n5));
        TreeNode n2 = new TreeNode(2,n1,n3);
        System.out.println(isValidBST(n2));
    }
    public static boolean isValidBST(TreeNode root) {
        return isValidBST(root,Long.MIN_VALUE,Long.MAX_VALUE);
    }

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

官方解

https://leetcode-cn.com/problems/validate-binary-search-tree/solution/yan-zheng-er-cha-sou-suo-shu-by-leetcode-solution/

  1. 递归

    如上

    • 时间复杂度:O(n)
    • 空间复杂度:O(n)
  2. 中序遍历

    二叉搜索树的性质让它在经历中序遍历的时候输出的结果是升序

    所以通过中序遍历来校验结果是否升序

    • 时间复杂度:O(n)
    • 空间复杂度:O(n)

相关文章

  • Swift 验证二叉搜索树- LeetCode

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

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

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

  • [LeetCode OJ]- Valid Binary Sea

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

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

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

  • Day48 验证二叉搜索树

    给定一个二叉树,判断其是否是一个有效的二叉搜索树 https://leetcode-cn.com/problems...

  • LeetCode 98. 验证二叉搜索树

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

  • LeetCode 验证二叉搜索树

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

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

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

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

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

  • LeetCode:是否是合法的二叉搜索树

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

网友评论

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

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