• 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)
        }
    }
    
  • 相关阅读:
    btrfs基础
    解决debian编辑器vim没有颜色的问题
    [转载]RHEL-6启动时提示:“/usr/libexec/gconf-sanity-check-2 exited with status 256”
    [转载]vim E667: Fsync failed
    Windows Server 2003修改远程桌面连接数
    [转载]"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的解决方案
    [转载]远程登录提示"*已经被拒绝登录到终端*"
    ESXi开启SSH的方法总结
    glibc 编译安装( version `GLIBC_2.14' not found")
    [转载]Wireshark基本介绍和学习TCP三次握手
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13411213.html
Copyright © 2020-2023  润新知