zoukankan      html  css  js  c++  java
  • 【力扣】98. 验证二叉搜索树

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

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

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

    输入:
    2
    /
    1 3
    输出: true
    示例 2:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/validate-binary-search-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    public boolean isValidBST(TreeNode root) {
            return dfs(root,Long.MAX_VALUE,Long.MIN_VALUE);
        }
    
    
    //时间复杂度: O(n)
    //空间复杂度:O(n)
        // 在原有的递归中,增加界限值
            //限制每个节点的最大值和最小值
        public boolean dfs(TreeNode root,long max,long min){
            if(root == null){
                return true;
            }
            if(root.val >= max || root.val <= min){
                return false;
            }
    
            return dfs(root.right,max,root.val) && dfs(root.left,root.val,min);
        }
    public int pre = Integer.MIN_VALUE;
    
    //时间复杂度和空间复杂度同上面相同,不过逻辑取巧,更简单了
        public boolean isValidBST(TreeNode root) {
            //如果按照二叉搜索树:
                //那么该种遍历方式应该是升序排序的
                //所以就可以校验,当前的值要比上一个值大就可以了
            if(root == null){
                return true;
            }
            if(!isValidBST(root.left)){
                return false;
            }
            if(root.val <= pre){
                return false;
            }
            pre = root.val;
            return isValidBST(root.right);
        }
    一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    java--Compara比较字符串排序(引用类型都可以)
    java---递归遍历文件
    java 增强for循坏遍历set 集合嵌套
    java-手写实现map
    ajax请求拿到多条数据拼接显示在页面中
    ajax取到数据后如何拿到data.data中的属性值
    .NET CORE IIS 500.21
    ConfigurationErrorsException: Unrecognized configuration section system.data.
    关于ajax中return并不能作为方法的返回值
    .net core 的跨域
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/14379106.html
Copyright © 2011-2022 走看看