• 【力扣】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开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    解决Could not load file or assembly CefSharp.Core.dll的问题
    操作AppConfig.xml中AppSettings对应值字符串
    SqlServer根据时段统计数据
    Jquery Validation 多按钮,多表单,分组验证
    HDU 4630 No Pain No Game 线段树 和 hdu3333有共同点
    二叉查找树模板
    五边形数定理
    HDU 4651 Partition 整数划分,可重复情况
    CSU 1114 平方根大搜索 java大数
    hdu 4869 Turn the pokers
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/14379106.html
Copyright © 2020-2023  润新知