给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
func isValidBST(root *TreeNode) bool {
return dfs(root.Left, root.Val, math.MinInt) && dfs(root.Right, math.MaxInt, root.Val)
}
func dfs(node *TreeNode, Max int, Min int) bool {
if node == nil {
return true
}
if node.Val >= Max || node.Val <= Min {
return false
}
return dfs(node.Left, node.Val, Min) && dfs(node.Right, Max, node.Val)
}
func isValidBST(root *TreeNode) bool {
var stack []*TreeNode
PreVal := math.MinInt64
for len(stack) != 0 || root != nil {
for root != nil {
stack = append(stack, root)
root = root.Left
}
root = stack[len(stack) - 1]
stack = stack[:len(stack) - 1]
if root.Val <= PreVal {
return false
}
PreVal = root.Val
root = root.Right
}
return true
}