func isValidBST(root *TreeNode) bool {
    r, _, _ := isVaildBST2(root)
    fmt.Print("yes")
    return r
}
func isVaildBST2(root *TreeNode) (bool, int, int) {
    var min, max, v int
    if root != nil {
        v = root.Val
    }
    if root.Left == nil {
        min = root.Val
    } else {
        lr, lmin, lmax := isVaildBST2(root.Left)
        if lr == false || lmax > v {
            return false, 0, 0
        }
        min = lmin
    }
    if root.Right == nil {
        max = root.Val
    } else {
        rr, rmin, rmax := isVaildBST2(root.Right)
        if rr == false || rmin < v {
            return false, 0, 0
        }
        max = rmax
    }
    return true, min, max
}
 展开