package main
import (
    "math"
)
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return bool布尔型
*/
func isValidBST( root *TreeNode ) bool {
    // write code here
    pre := math.MinInt
    var dfs func(node *TreeNode) bool
    dfs = func(node *TreeNode) bool {
        if node == nil {
            return true
        }
        if !dfs(node.Left) {
            return false
        }
        if node.Val < pre {
            return false
        }
        pre = node.Val
        return dfs(node.Right) 
    }
    return dfs(root)
}