essay
hot100-验证搜索二叉树
#算法
hot100——验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 严格小于 当前节点的数。
节点的右子树只包含 严格大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
树中节点数目范围在[1, ] 内
- <= Node.val <= - 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)
}