LeetCode-in-Scala.github.io

98. Validate Binary Search Tree

Medium

Given the root of a binary tree, determine if it is a valid binary search tree (BST).

A valid BST is defined as follows:

Example 1:

Input: root = [2,1,3]

Output: true

Example 2:

Input: root = [5,1,4,null,null,3,6]

Output: false

Explanation: The root node’s value is 5 but its right child’s value is 4.

Constraints:

Solution

import com_github_leetcode.TreeNode

/*
 * Definition for a binary tree node.
 * class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) {
 *   var value: Int = _value
 *   var left: TreeNode = _left
 *   var right: TreeNode = _right
 * }
 */
object Solution {
    def isValidBST(root: TreeNode): Boolean = {
        def solve(node: TreeNode, left: Long, right: Long): Boolean = {
            if (node == null) {
                true
            } else if (node.value <= left || node.value >= right) {
                false
            } else {
                solve(node.left, left, node.value) && solve(node.right, node.value, right)
            }
        }

        solve(root, Long.MinValue, Long.MaxValue)
    }
}