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
}
展开