0098.验证二叉搜索树

方法一:递归

时间复杂度 $O(n)$,空间复杂度 $O(n)$,之所以空间复杂度为 $O(n)$ 是考虑到最坏情况下二叉树为一条链,树的高度为 $n$,递归最深达到 $n$ 层。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isValidBST(root *TreeNode) bool {
	var dfs func(node *TreeNode, min, max int) bool
	dfs = func(node *TreeNode, min, max int) bool {
		if node == nil {
			return true
		}
		if node.Val <= min || node.Val >= max {
			return false
		}
		return dfs(node.Left, min, node.Val) && dfs(node.Right, node.Val, max)
	}
	return dfs(root, -1<<31-1, 1<<31)
}