• leetcode刷题笔记九十八题 验证二叉搜索树


    leetcode刷题笔记九十八题 验证二叉搜索树

    源地址:98. 验证二叉搜索树

    问题描述:

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

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

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

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

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

    /**
    本题有两种解法,一种是递归, 一种是中序遍历
    递归过程需要注意,由于二叉搜索树的性质是root大于左子树小于右子树,直接比较当前结点的左右子树并不合理,需要设置一个lower和upper上下界并更新
    */
    /**
     * Definition for a binary tree node.
     * class TreeNode(var _value: Int) {
     *   var value: Int = _value
     *   var left: TreeNode = null
     *   var right: TreeNode = null
     * }
     */
    object Solution {
        def isValidBST(root: TreeNode): Boolean = {
            def helper(root: TreeNode, upper: Long, lower: Long): Boolean = {
                if (root == null) return true
                val cur = root.value
                if (lower != Long.MinValue && cur <= lower)  return false
                if (upper != Long.MinValue && cur >= upper)  return false
                if (helper(root.left, cur, lower) == false) return false
                if (helper(root.right, upper, cur) == false) return false
                return true
            }
            return helper(root, Long.MaxValue, Long.MinValue)
        }
    }
    
    /**
    中序遍历的情况下,由于二叉搜索树的性质,获取的结点依序严格递增,这样我们可以设置一个lower与root.value比较,如果大于等于就返回false,否则更新lower,比较下一个结点
    */
    /**
     * Definition for a binary tree node.
     * class TreeNode(var _value: Int) {
     *   var value: Int = _value
     *   var left: TreeNode = null
     *   var right: TreeNode = null
     * }
     */
    object Solution {
        def isValidBST(root: TreeNode): Boolean = {
            var lower = Long.MinValue
            def helper(root: TreeNode): Boolean = {
                if (root != null){
                    if (root.left != null &&  helper(root.left) == false) return false
                    if(root.value <= lower) return false
                    lower = root.value
                    if(root.right != null &&  helper(root.right) == false) return false
                }
                return true
            }
            return helper(root)
        }
    }
    
  • 相关阅读:
    good course Very
    HTTP Hypertext Transfer Protocol Overview
    Linux下tar.xz结尾的文件的解压方法
    原来java HttpURLConnection本身就提供了chunk的支持,又是让人一惊啊
    牛人一枚
    V2EX › 花了3个晚上,把readability最新的1.7.1转成了python版的
    13.11. 惯例优先原则(convention over configuration)
    明尼苏达大学
    快速构建实时抓取集群 « 搜索技术博客-淘宝
    Java Practices > Home
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13411213.html
Copyright © 2020-2023  润新知