// 原始写法
//本地验证通过,但leetcode提交验证失败,当root=[0]时,本地是true,leetcode上是false,具体原因没想明白。
var prev *TreeNode
func isValidBST(root *TreeNode) bool {
if root == nil {
return true
}
leftFlag := isValidBST(root.Left)
if prev != nil && root.Val <= prev.Val {
return false
}
prev = root
rightFlag := isValidBST(root.Right)
return leftFlag && rightFlag
}
//把递归封装为内部函数leetcode正常, 写法如下:
func isValidBST(root *TreeNode) bool {
var prev *TreeNode
var traversal func(tree *TreeNode) bool
traversal = func(tree *TreeNode) bool {
if tree == nil {
return true
}
leftFlag := traversal(tree.Left)
if prev != nil && tree.Val <= prev.Val {
return false
}
prev = tree
rightFlag := traversal(tree.Right)
return leftFlag && rightFlag
}
res := traversal(root)
return res
}