essay

hot100-验证搜索二叉树

#算法

hot100——验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

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

示例 1:
image.png

输入:root = [2,1,3]

输出:true

示例 2:
image.png

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

输出:false

解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

树中节点数目范围在[1, 10410^4] 内

-2312^{31} <= Node.val <= 2312^{31} - 1

解法

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
import "math"
 
func isValidBST(root *TreeNode) bool {
    return validate(root, math.MinInt64, math.MaxInt64)
}
 
func validate(node *TreeNode, min, max int) bool {
    if node == nil {
        return true
    }
    // 当前节点值必须在 (min, max) 范围内
    if node.Val <= min || node.Val >= max {
        return false
    }
    // 左子树所有节点值必须小于当前节点值,所以最大值更新为 node.Val
    // 右子树所有节点值必须大于当前节点值,所以最小值更新为 node.Val
    return validate(node.Left, min, node.Val) && validate(node.Right, node.Val, max)
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接