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开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    CentOS6.5系统服务
    Linux下查看文件内容时去掉空行和#开头的注释行
    sql去重复(RecordNum )
    bootstrap-fileinput使用
    javascript事件失效l
    vs2015里,发布OSGI.NET
    视频允许播放禁止下载
    zTree模糊查询人员姓名:getNodesByParamFuzzy
    OSGI.NET,请求因HTTP状态404 失败:Not Found
    异常
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/14379106.html
Copyright © 2011-2022 走看看