67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package top100liked
|
|
|
|
// https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=study-plan-v2&envId=top-100-liked
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
// AC, 但很慢
|
|
// func inorderTraversal(root *TreeNode) []int {
|
|
// if root == nil {
|
|
// return []int{}
|
|
// }
|
|
// res := []int{}
|
|
// if root.Left != nil {
|
|
// res = append(res, inorderTraversal(root.Left)...)
|
|
// }
|
|
// res = append(res, root.Val)
|
|
// if root.Right != nil {
|
|
// res = append(res, inorderTraversal(root.Right)...)
|
|
// }
|
|
// return res
|
|
// }
|
|
|
|
// func isValidBST(root *TreeNode) bool {
|
|
// if root == nil {
|
|
// return true
|
|
// }
|
|
// l := inorderTraversal(root)
|
|
// if len(l) == 1 {
|
|
// return true
|
|
// }
|
|
// for i, j := 0, 1; j < len(l); {
|
|
// if l[i] >= l[j] {
|
|
// return false
|
|
// }
|
|
|
|
// i++
|
|
// j++
|
|
// }
|
|
// return true
|
|
// }
|
|
|
|
func isValidBST(root *TreeNode) bool {
|
|
var prev *int
|
|
var inorder func(node *TreeNode) bool
|
|
inorder = func(node *TreeNode) bool {
|
|
if node == nil {
|
|
return true
|
|
}
|
|
if !inorder(node.Left) {
|
|
return false
|
|
}
|
|
if prev != nil && *prev >= node.Val {
|
|
return false
|
|
}
|
|
prev = &node.Val
|
|
if !inorder(node.Right) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
return inorder(root)
|
|
}
|